Contract 0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x47b1d341e8e93bf3e4671a44af45957bfb29ccd4af01333e25f4316e965ec78eApprove79690622021-06-03 8:01:29114 days 7 hrs ago0x2436cea24b474cd00fd1d917ea7e73088c6c818b IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x74419baad47d7b3ca2d2cb6cbca23510454fab00ccad5fb1731f6e1459e42e92Approve78260602021-05-29 8:26:54119 days 6 hrs ago0xc1e6dd3735206b97909ec9f1766dd1205903e34f IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022363096
0x78046c5eeacb25e06752ea38970f967186d44f517c0820781ca1f3cd5c50d614Approve77860872021-05-27 23:01:51120 days 16 hrs ago0x8d16fb494cf046f6c9c0361a093f01bae725f292 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0xf5abf983bd8e340ae1beb75bac98e9f6ce1d21c5abeb32f908f2644c3e6012a5Approve77486482021-05-26 15:39:51121 days 23 hrs ago0xd8d6c75fbdca84e0dcac449dba03fc30e3e3e8b5 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x6c16948018ce2633d198185e8731af9b3b461641f435ea05528f058a6d0f4c6bApprove77247522021-05-25 19:30:00122 days 19 hrs ago0xf980156f1ddb81607fe2bfc65668f09bfbd8bea9 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x9556dbe37e10cc256bbcbf3feb0b1733e9b4da4e81038339f1cf54838030f3adApprove77246032021-05-25 19:22:30122 days 19 hrs ago0x68a6f276b735543be91b2b27e8b394fe9c0ee61e IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x9cff3484a59fcb2fec030d77ec4ec8ea9f243c684f16994efe59e22f1277361bSet Swap And Liq...77242352021-05-25 19:04:06122 days 20 hrs ago0xb0c637c70dcde2286f9b63a6db66ae6de4604108 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00007363
0xddfc3fe21c5f46b6aa56a4ada22e6812251f514b27d9114828b37bfad41971a7Set Max Tx Perce...77242322021-05-25 19:03:57122 days 20 hrs ago0xb0c637c70dcde2286f9b63a6db66ae6de4604108 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00014296
0xeaeaacdd318c9752a36e838d1ba830ae2cea2bf5aa5ae88ea9c5f78d904eb091Approve77232482021-05-25 18:14:45122 days 20 hrs ago0x6621867587a15b870ed6a141c5fe54de2429be03 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0xd08a58e7378eccda46f1f59c90e622108dee81bec866d50d6215d128a38a9ca9Approve77231872021-05-25 18:11:42122 days 20 hrs ago0x4a978972ba940fdf706481b37d1d7cbbc836da89 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x67d973e106d32cbe1f6dc104622e5531b49c7ed4923962d57823c878f907e5a8Approve77227692021-05-25 17:50:48122 days 21 hrs ago0x370d7e07b21d3c4760e8bd395e748b220d8008da IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x67fae09b1cf8c6c89e03b7984bdd6cf10efadeeefc826d0cf910803f71d9c63cApprove77225562021-05-25 17:40:09122 days 21 hrs ago0x07e27fb4a0182ca941aa5061bc083661458f944c IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x6b34da8c97b4ba9fb9ce85fa4e85a82b3271197b984ebee2befe952d94a58b1eApprove77225542021-05-25 17:40:03122 days 21 hrs ago0xd7141377dbfcfbdf64c1d0d63f5cf6fd0ac19695 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.000534576
0xf6463e18551ddd8cd557d11d7ad3b98fe1df7b8179e7b326c3a4888d36cb0807Approve77225252021-05-25 17:38:36122 days 21 hrs ago0xb0c637c70dcde2286f9b63a6db66ae6de4604108 IN  0xdb1107ae7b2c972a5004f7859a476e07f66b3e8c0 BNB0.00022274
0x2c0859654188cc5e0bf046a53f405f6d1e6cd2120e6256ee4a33d5255f0904750x60c0604077224852021-05-25 17:36:36122 days 21 hrs ago0xb0c637c70dcde2286f9b63a6db66ae6de4604108 IN  Contract Creation0 BNB0.03339541
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Turkish

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-25
*/

/**
 *Submitted for verification at BscScan.com on 2021-03-01
*/

/**
 *Submitted for verification at BscScan.com on 2021-03-01
*/

/**

   #BEE

   #LIQ+#RFI+#SHIB+#DOGE = #BEE
   #Turkish features:
   3% fee auto add to the liquidity pool to locked forever when selling
   2% fee auto distribute to all holders
   I created a black hole so #Bee token will deflate itself in supply with every transaction
   50% Supply is burned at start.

   The Armenian genocide (also known by other names) was the systematic mass murder and ethnic cleansing of around one million ethnic Armenians from Anatolia and adjoining regions by the Ottoman Empire and its ruling party, the Committee of Union and Progress (CUP), during World War I.

During their invasion of Russian and Persian territory, Ottoman paramilitaries massacred local Armenians; massacres turned into genocide after the Ottomans suffered a catastrophic defeat at the Battle of Sarikamish in January 1915, a loss blamed on Armenian treachery. Ottoman leaders took isolated indications of Armenian resistance as evidence of a widespread conspiracy, even though no such conspiracy existed. Mass deportation was intended as the "definitive solution to the Armenian Question"[4] and to permanently forestall the possibility of Armenian autonomy or independence. Armenian soldiers in the Ottoman Army were disarmed pursuant to a February order, and were later killed. On 24 April 1915, the Ottoman authorities rounded up, arrested, and deported hundreds of Armenian intellectuals and community leaders from Constantinople (now Istanbul).

At the orders of Talat Pasha, an estimated 800,000 to 1.2 million Armenian women, children, and elderly or infirm people were sent on death marches leading to the Syrian Desert in 1915 and 1916. Driven forward by paramilitary escorts, the deportees were deprived of food and water and subjected to robbery, rape, and massacre. In the Syrian Desert, the survivors were dispersed into a series of concentration camps; in early 1916 another wave of massacres was ordered, leaving about 200,000 deportees alive by the end of 1916. Around 100,000 to 200,000 Armenian women and children were forcibly converted to Islam and integrated into Muslim households. Massacres and ethnic cleansing of Armenian survivors were carried out by the Turkish nationalist movement during the Turkish War of Independence after World War I.

The Armenian genocide resulted in the destruction of more than two millennia of Armenian civilization in eastern Asia Minor. With the destruction and expulsion of Syriac and Greek Orthodox Christians, it enabled the creation of an ethnonational Turkish state. Before World War II, the Armenian genocide was widely considered the greatest atrocity in history. As of 2021, 30 countries have recognized the events as genocide. Against the academic consensus, Turkey denies that the deportation of Armenians was a genocide or wrongful act.


Contents
1	Background
1.1	Armenians in the Ottoman Empire
1.2	Land conflict and reforms
1.3	Young Turk Revolution
1.4	Balkan Wars
2	Entry into World War I
3	Onset of genocide
4	Systematic deportations
4.1	Death marches
4.2	Islamization
5	Destination
6	Confiscation of property
7	Death toll
8	International reaction
9	Postwar
9.1	Trials
9.2	Turkish War of Independence
10	Legacy
10.1	Turkey
10.2	Armenia and Azerbaijan
10.3	International recognition
10.4	Cultural depictions
10.5	Archives and historiography
11	References
11.1	Citations
11.2	Sources
12	External links
Background
Armenians in the Ottoman Empire
Main article: Armenians in the Ottoman Empire

A 1910 British ethnographic map of the Middle East; Armenians shown in green, Kurds in yellow, Turks in brown; note concentrations of Armenians around Eastern Armenia, Lake Van, and Zeytun. In most places that they lived, Ottoman Armenians were a minority, although they often lived in homogenous villages.[5]
The presence of Armenians in Anatolia has been documented since the sixth century BCE, more than a millennium before Turkish incursion and presence.[6][7] The Kingdom of Armenia adopted Christianity as its national religion in the fourth century CE, establishing the Armenian Apostolic Church.[8] Following the Byzantine Empire's fall in 1453, two Islamic empires—the Ottoman Empire and the Iranian Safavid Empire—contested Western Armenia, which was permanently separated from Eastern Armenia (held by the Safavid Empire) by the 1639 Treaty of Zuhab.[9]

Sharia law encoded Islamic supremacy but guaranteed property rights and freedom of worship to non-Muslims (dhimmis) in exchange for a special tax,[10] but they were also pejoratively referred to in Ottoman Turkish as gavurs, a word connoting that they were "disloyal, avaricious, and not to be trusted".[11] Most Armenians were grouped together into a semi-autonomous community (millet), led by the Armenian Patriarch of Constantinople.[12] The millet system institutionalized the inferiority of non-Muslims, but granted the Armenians significant autonomy.[13]

Around two million Armenians lived in the Ottoman Empire on the eve of World War I.[14] According to the Armenian Patriarchate's 1913–1914 estimates, there were 2,925 Armenian towns and villages in the empire, of which 2,084 were in the Armenian Highlands in the vilayetss of Bitlis, Diyarbekir, Erzerum, Harput, and Van. Hundreds of thousands of Armenians lived elsewhere, scattered throughout central and western Asia Minor. The Armenian population was mostly rural, especially in the Armenian Highlands, where 90 percent were peasant farmers.[15] Armenians were a minority in most parts of the empire, living alongside their Turkish, Kurdish, and Greek Orthodox neighbors.[14][15] According to the Patriarchate's figure, 215,131 Armenians lived in urban areas, especially Constantinople, Smyrna, and Eastern Thrace.[15] In the nineteenth century, a few urban Armenians became extremely wealthy through their connections to Europe.[16]

Land conflict and reforms

Gundemir, an Armenian village in Bitlis Vilayet, at the turn of the twentieth century
Armenians in the eastern provinces lived in semi-feudal conditions and commonly encountered forced labor, illegal taxation, and unpunished crimes against them including robberies, murders, and sexual assaults.[17][18] Until 1908, non-Muslims in the empire were forbidden to carry arms, leaving them unable to defend themselves.[19] In the mid-nineteenth century, the Ottoman government instituted the Tanzimat, a series of reforms to equalize the status of Ottoman subjects regardless of confession, a goal strongly opposed by Islamic clergy and Muslims in general.[20][21] The Tanzimat failed to improve the condition of Armenian peasantry in the eastern provinces, which regressed from 1860 onwards.[22] The Ottoman Land Code of 1858 disadvantaged Armenians and many now had to pay double taxation both to Kurdish landlords and the Ottoman government.[23]

From the mid-nineteenth century, Armenians faced large-scale land usurpation as a consequence of the sedentarization of Kurdish tribes and the arrival of Muslim refugees and immigrants (mainly Circassians) following the Caucasus War.[24][25][26] In 1876, when Abdul Hamid II came to power, the state began to confiscate Armenian-owned land in the eastern provinces and give it to Muslim immigrants, as part of a systematic policy to reduce the Armenian population of these areas.[27] These conditions led to a substantial decline in the Armenian Highlands' population; 300,000 Armenians emigrated in the decades leading up to World War I, while others moved to towns.[28][29] To achieve improved conditions, a few Armenians joined revolutionary political parties, of which the most influential was the Dashnaktsutyun (Armenian Revolutionary Federation), founded in 1890.[30]

Abdul Hamid suspended the 1876 Constitution of the Ottoman Empire the following year after parliamentarians criticized his handling of the Russo-Turkish War of 1877–1878.[31] Russia's decisive victory forced the Ottoman Empire to cede parts of eastern Asia Minor, the Balkans, and Cyprus.[32] At the 1878 Congress of Berlin, the Sublime Porte (Ottoman government) agreed to carry out reforms and guarantee the physical safety of its Armenian subjects, but there was no enforcement mechanism;[33] conditions continued to worsen.[34][35] This marked the emergence of the Armenian Question in international diplomacy as Armenians were for the first time used to interfere in Ottoman politics.[36] Although Armenians had been called the "loyal millet" in contrast to Greeks and others who had previously challenged Ottoman rule, after 1878 Armenians became perceived as subversive and ungrateful.[37]

In 1891, Abdul Hamid created the Hamidiye regiments from Kurdish tribes, allowing them to act with impunity against Armenians.[38][34] From 1895 to 1896 the empire saw widespread massacres; at least 100,000 Armenians were killed[39][40] by Ottoman soldiers, crowds incited to violence, and Kurdish tribes.[41] Many Armenian villages were forcibly converted to Islam.[28] The Ottoman state bore ultimate responsibility for the killings,[42] whose purpose was violently restoring the previous social order in which Christians would unquestioningly accept Muslim supremacy,[43][44] and forcing Armenians to emigrate, thereby decreasing their numbers.[45]

Young Turk Revolution
Main article: Young Turk Revolution
Abdul Hamid's despotism prompted the formation of an opposition movement, the Young Turks, who sought to overthrow him and restore the constitution.[46] One faction of the Young Turks was the secret and revolutionary Committee of Union and Progress (CUP), based in Salonica, from which the charismatic conspirator Mehmed Talat (later Talat Pasha) emerged as a leading member.[47] Although skeptical of a growing, exclusionary Turkish nationalism in the Young Turk movement, the Dashnaktsutyun decided to ally with the CUP in December 1907.[48][49] In 1908, the Young Turk Revolution began with a string of CUP assassinations of leading Hamidian officials in Macedonia.[50][51] Abdul Hamid failed to quell the rebellion, and the capitol was threatened by invasion by military units controlled by CUP-supporting officers in Macedonia. He was forced to reinstate the 1876 constitution and restore parliament, which was celebrated by Ottomans of all ethnicities and religions.[52][53] Although security improved in the eastern provinces after 1908,[54] the Young Turks did not reverse the land usurpation of the previous decades, contrary to Armenian hopes.[55]


The Armenian quarter of Adana after the 1909 massacres
Abdul Hamid attempted an unsuccessful countercoup in early 1909, supported by conservatives and some liberals who opposed the CUP's increasingly repressive governance.[56] When news of the countercoup reached Adana, armed Muslims attacked the Armenian quarter and Armenians returned fire. Ottoman soldiers did not protect Armenians and instead armed the rioters.[57] Between 20,000 and 25,000 people, mostly Armenians, were killed in Adana and nearby towns.[58] Unlike the Hamidian massacres, the events were not organized by the central government but instigated by local officials, intellectuals, and Islamic clerics, including CUP supporters in Adana.[59] Although the massacres went unpunished, the Dashnaktsutyun continued to hope that reforms to improve security and restore lands were forthcoming, until late 1912, when they broke with the CUP and appealed to the European powers.[60][61][62] On 8 February 1914, the CUP reluctantly agreed to the 1914 Armenian reforms, which stipulated the appointment of two European inspectors for the entire Ottoman east and putting the Hamidiye in reserve, were never implemented due to World War I. CUP leaders feared these reforms would lead to partition and cited them as a reason for the elimination of the Armenian population the following year.[63][64][65]

Balkan Wars

Turkish/Muslim bandits parading with loot in Phocaea (modern-day Foça, Turkey) on 13 June 1914. In the background are Greek refugees and burning buildings.
The 1912 First Balkan War resulted in the loss of almost all of the empire's European territory[66] and the mass expulsion of Muslims from the Balkans.[67] Ottoman Muslim society was incensed by the atrocities committed against Balkan Muslims, intensifying anti-Christian sentiment and leading to a desire for revenge.[68][69] In January 1913, the CUP launched another coup, installed a one-party state, and strictly repressed all real or perceived internal enemies.[70][71] Although the Young Turk movement included a number of factions, by 1914 its most influential ideologues had rejected Ottoman multiculturalism in favor of pan-Turanism or pan-Islamism, aiming to consolidate the empire by reducing the number of Christians and increasing the Muslim population.[72] CUP leaders such as Talat and Enver Pasha came to blame non-Muslim population concentrations in strategic areas for many of the empire's problems, concluding by mid-1914 that they were "internal tumors" to be excised.[73] Armenians were considered most dangerous, because their homeland in Asia Minor was claimed as the last refuge of the Turkish nation.[74][75]

After the 1913 coup, the CUP pursued a policy of changing the demographic balance of border areas by resettling Muslim immigrants while coercing Christians to leave;[76] immigrants were promised property that had belonged to Christians.[77] When parts of Eastern Thrace were reoccupied by the Ottoman Empire during the Second Balkan War in mid-1913, local Greeks, and Armenians—who had not fought against the empire—were subjected to looting and intimidation.[78] Around 150,000 Greek Orthodox from the Aegean littoral were forcibly deported in May and June 1914 by Muslim bandits secretly backed by the CUP and sometimes joined by the regular army.[79][80][81] This ethnic cleansing campaign, brought to an end in exchange for Greece's promise to remain neutral in the upcoming war,[82] has been described by historian Taner Akçam as "a trial run for the Armenian genocide".[83][84]

Entry into World War I
See also: Middle Eastern theatre of World War I

Armenian soldiers in the Ottoman army
A few days after the outbreak of World War I, the CUP concluded an alliance with Germany on 2 August 1914.[85] The same month, CUP representatives went to a Dashnak conference demanding that, in the event of war with Russia, the Dashnaktsutyun incite Russian Armenians to intervene on the Ottoman side. Instead, the delegates resolved that Armenians should fight for the countries of their citizenships.[86] During its war preparations, the Ottoman government recruited thousands of prisoners to join the paramilitary Special Organization,[87] which initially focused on stirring up revolts among Muslims behind Russian lines beginning in mid-1914.[88] On 29 October 1914, the Ottoman Empire entered World War I on the side of the Central Powers by launching a surprise attack on Russian ports in the Black Sea.[89]

Wartime requisitions, often corrupt and arbitrary, were used to target Greeks and Armenians in particular.[90] Armenian leaders urged young men to accept conscription into the army, but many soldiers, of all ethnicities and religions, deserted due to difficult conditions and concern for their families.[91] During the Ottoman invasion of Russian and Persian territory, the Special Organization massacred local Armenians and Syriac Christians.[92][93] Beginning in November 1914, provincial governors of Van, Bitlis, and Erzurum sent many telegrams to the central government pressing for more severe measures against the Armenians, both regionally and throughout the empire.[94] These pressures played a key role in the intensification of anti-Armenian persecution and met a favorable response already before 1915.[95] Armenian civil servants were dismissed from their posts in late 1914 and early 1915.[96] On 25 February 1915, Enver Pasha ordered the removal of all non-Muslims serving in Ottoman forces from their posts; they were to be disarmed and transferred to labor battalions.[97] Beginning in early 1915, the Armenian soldiers in labor battalions were systematically executed, although many skilled workers were spared until 1916.[98]

Onset of genocide

Armenian defenders in Van

Russian soldiers pictured in the former Armenian village of Sheykhalan near Muş, 1915
Minister of War Enver Pasha took over command of the Ottoman armies for the invasion of Russian territory, and tried to encircle the Russian Caucasus Army at the Battle of Sarikamish, fought from December 1914 to January 1915. Unprepared for the harsh winter conditions,[99] his forces were routed, losing more than 60,000 men.[100] The retreating Ottoman army indiscriminately destroyed dozens of Ottoman Armenian villages in Bitlis Vilayet, massacring their inhabitants.[96] Returning to Constantinople, Enver Pasha publicly blamed his defeat on Armenians in the region, saying they had actively sided with the Russians, which became a consensus among CUP leaders.[101][102] Claims of Armenian revolts deflected blame for the Ottoman military's failures, especially Sarikamish.[103] Any local incident or discovery of arms in the possession of Armenians was cited as evidence for a coordinated conspiracy against the empire.[97] Akçam concludes that "the allegations of an Armenian revolt in the documents ... have no basis in reality but were deliberately fabricated".[104][105]

Most historians date the final decision to exterminate the Armenian population to the end of March or early April 1915.[106] Historian Ronald Grigor Suny states, "Deportations ostensibly taken for military reasons rapidly radicalized monstrously into an opportunity to rid Anatolia once and for all of those peoples perceived to be an imminent existential threat to the future of the empire."[107]

The province of Van descended into lawlessness by the end of 1914,[108] and massacres of Armenian men were occurring in the Başkale area from December.[109] Dashnak leaders attempted to keep the situation calm, urging Armenians to tolerate localized massacres because even justifiable self-defense could lead to a generalized massacre.[110] The governor, Cevdet Bey, ordered the Armenians of Van to hand over their arms on 18 April, creating a dilemma for the Armenians: If they obeyed, they expected to be killed, but if they refused, it would provide a pretext for massacres elsewhere. Other Dashnak leaders having been killed, Aram Manukian organized the fortification of the Armenian quarter of Van and defended it from the Ottoman attack that began on 20 April.[111][112]

During the siege, Armenians in surrounding villages were massacred at Cevdet's orders. Russian forces captured Van on 18 May, finding 55,000 corpses in the province—about half its prewar Armenian population.[113] Cevdet's forces proceeded to Bitlis and attacked Armenian and Syriac villages; men were killed immediately, women and children kidnapped by local Kurds, and others marched away to be killed later. By the end of June, there were only a dozen Armenians in the vilayet. Around Muş, 141,000 Armenians in more than 200 villages were ethnically cleansed during the second week of July.[114]

During the night of 23–24 April 1915, at the orders of Talat Pasha, hundreds of Armenian political activists, intellectuals, and community leaders—including many of Talat's former political allies—were rounded up in Constantinople and across the empire. This order, intended to eliminate the Armenian leadership and anyone capable of organizing resistance, resulted in the torture and eventually murder of most of those arrested, who were forced to confess to a nonexistent Armenian conspiracy against the empire.[115][116][117] The same day, Talat ordered the shuttering of all Armenian political organizations[118] and diverted the Armenians who had previously been removed from Alexandretta, Dörtyol, Adana, Hadjin, Zeytun, and Sis to the Syrian Desert, instead of the previously planned destination of central Asia Minor, where they would likely have survived.[119][120]

Systematic deportations

Armenians gathered in a city prior to deportation. They were murdered outside the city.

Armenian deportees in Erzurum, photographed by Viktor Pietschmann. Of the 40,000 Armenians deported from Erzurum, fewer than 200 reached Deir ez-Zor.[121]
In an interview published in Berliner Tageblatt on 4 May 1915, Talat Pasha acknowledged that when Armenians were deported, no distinction was made between "guilty" and "innocent" Armenians, because "one who was still innocent today could be guilty tomorrow".[122] On 23 May, he ordered the deportation of the entire Armenian millet to Deir ez-Zor, beginning with the northeastern provinces. The Allies issued a condemnation of Ottoman crimes against Armenians on 24 May, leading the CUP to hastily attempt to disguise the nature of their actions.[123] On 29 May, the CUP Central Committee passed the Temporary Law of Deportation ("Tehcir Law"), authorizing the Ottoman government and military to deport anyone deemed to be a threat to national security.[121][124] Deportation amounted to a death sentence; the authorities planned for and intended the death of the deportees.[125][126][127] Deportation was only carried out behind the front lines, where no active rebellion existed, and was only possible in the absence of widespread resistance. Armenians who lived in the war zone were instead killed in massacres.[128]

Although ostensibly undertaken for military reasons,[129] the deportation and murder of Armenians did not grant the empire any military advantage and actually undermined the Ottoman war effort. The deportations deprived the state of labor needed to maintain the war effort and undermined military supplies.[130][131] Ottoman records show the government aimed to reduce the population of Armenians to no more than 5 to 10 percent in any part of the empire, both in the places from which Armenians were deported and in the destination areas. This goal could not be accomplished without mass murder.[132][133][134] The CUP hoped to permanently eliminate any possibility that Armenians could achieve autonomy or independence in the empire's eastern provinces by annihilating the concentrated Armenian population of these areas.[135] In Talat's words, the purpose of the deportations was the "definitive solution to the Armenian Question".[4] By late 1915, the CUP had extinguished Armenian existence from eastern Asia Minor.[136] In August 1915, deportation was extended to western Asia Minor and European Turkey; these deportees were often allowed to travel by rail. Some areas with a very low Armenian population and some cities were partially spared from deportation.[137]

Overall, national, regional, and local levels of governance, as well as power-brokers in the party, government, and army, cooperated willingly in the perpetration of genocide.[138][139] The initiation and organization was primarily carried out by civilian officials under the Ministry of the Interior rather than the Ministry of War.[139] The killings near the front lines were carried out by the Special Organization but those farther away also involved local militias, bandits, gendarmes, or Kurdish tribes depending on the area.[140] Many perpetrators came from the Caucasus (Chechens and Circassians), who identified the Armenians with their Russian oppressors. Nomadic Kurds committed many atrocities during the genocide, but settled Kurds only rarely did so.[141] Perpetrators had a variety of motives, including ideology, revenge, desire for Armenian property, and careerism.[142] Historian Uğur Ümit Üngör argues that "the involvement of seasoned criminals and militiamen hardened in years of (low-intensity) conflict in the Balkans, accounts for the cruelty of the genocide".[143] Some Ottoman politicians opposed the genocide; they faced dismissal or assassination.[138][144] The government decreed that any Muslim who harbored an Armenian against the will of the authorities would be executed.[145][146]

map showing locations where Armenians were killed, deportation routes, and transit centers, as well as locations of Armenian resistance
Map of the Armenian genocide in 1915
Death marches

On 24 September 1915, United States consul Leslie Davis visited Lake Hazar and found nearby gorges choked with corpses and hundreds of bodies floating in the lake.[147]
Although the majority of able-bodied men had been conscripted into the army, others remained if they were too old or young, had deserted, or had paid the exemption tax. Unlike in the Hamidian massacres or Adana events, massacres were usually not committed in the Armenian villages, to avoid destruction of property or unauthorized looting. Instead, the men were usually separated from the rest of the deportees during the first few days and executed. Few resisted, believing it would put their families in greater danger.[140] Boys above the age of twelve (sometimes fifteen) were treated as adult men.[148] Execution sites were chosen for proximity to major roads and for rugged terrain, lakes, wells, or cisterns to facilitate the concealment or disposal of corpses.[149][147] The convoys would stop at a nearby transit camp and the escorts would demand a ransom from the Armenians; those who were unable to pay were massacred.[140]

More than 500,000 Armenians passed through the Firincilar plain south of Malatya. Arriving convoys, having passed through the plain and approaching the Kahta highlands, would have found gorges already filled with corpses from previous convoys, in one of the deadliest areas during the genocide.[150][149] Thousands of Armenians were killed near Lake Hazar, pushed by paramilitary units off the cliffs into valleys from which the only escape was into the lake.[147] Many others were trapped in valleys of tributaries of the Tigris, Euphrates, or Murat River by members of the Special Organization; their bodies were thrown into the river. These corpses arrived in Upper Mesopotamia before the first of the living deportees.[151] Armenian men were often drowned by being tied together back-to-back before being thrown in the water, a method that was not used on women.[152]


The corpses of Armenians beside a road, a common sight along deportation routes
Authorities viewed disposal of bodies through rivers as a cheap and efficient method, but it caused widespread pollution downstream. So many bodies floated down the Tigris and Euphrates rivers that they sometimes blocked the rivers and needed to be cleared with explosives. Other rotting corpses became stuck to the riverbanks, while some traveled as far as the Persian Gulf. The rivers remained polluted long after the massacres, and Arab populations downstream were affected by epidemics.[153] Tens of thousands of Armenians died along the roads and their bodies were buried hastily or, more often, simply left beside the roads. Key roads threatened to become impassible due to the contamination of corpses, and typhus epidemics spread in nearby villages; the Ottoman government also wanted the corpses cleared to prevent photographic documentation. The Ottoman government ordered the corpses to be cleared as soon as possible, which was not uniformly followed.[154][155]

Women and children, who made up the great majority of deportees, were usually not executed immediately, but subjected to hard marches through mountainous terrain without food and water. Those who could not keep up were left to die or shot.[156] During 1915, some were forced to walk as far as 1,000 kilometres (620 mi) in the summer heat.[127] In order to preserve families, older women would give away their food to younger family members. Mothers would surrender their daughters before their sons and give their lives to protect at least one male descendant.[137] There was a distinction between the convoys from eastern Anatolia, which were eliminated almost in their entirety, and those from farther west, who made up most of those surviving to reach Syria.[157]

Islamization

Islamized Armenians who were "rescued from Arabs" after the war
Akçam states that Islamization, carried out as a systematic state policy, "was as much a structural element of genocide as physical destruction".[158] An estimated 100,000 to 200,000 Armenians were Islamized.[159] Some Armenians were allowed to convert to Islam and evade deportation, but where their numbers exceeded the 5 to 10 percent threshold, or where there was a risk of their being able to preserve their nationality and culture, the regime insisted on their physical destruction.[160]

Young women and girls were often appropriated as house servants or sex slaves. Some boys were abducted to work as unfree laborers for individual Muslims, or sent to state-run orphanages.[149][161] Some children were forcibly seized, but others were sold or given up by their parents to save their lives.[162][163] Most of them endured exploitation, hard labor without pay, forced conversion to Islam, and physical and sexual abuse.[161]

Women and children who fell into Muslim hands during the journey typically ended up in Turkish or Kurdish hands, in contrast with those captured in Syria by Arabs and Bedouins.[164] The CUP permitted marriage of Armenian females into Muslim households, as these women were forced to convert to Islam and would lose their Armenian identity.[149] By such marriages or adoptions, Muslim families were entitled to the Armenian family's property.[165] Military commanders told their men to "do to [the women] whatever you wish", resulting in widespread rapes.[166]

Historian Hilmar Kaiser states that for Armenians, "Rape meant an irreparable transgenerational loss of self-esteem, or 'honor'".[149] Although Armenian women tried various means of avoiding sexual violence, often suicide was the only available means of escape.[167] Deportees were displayed naked in Damascus and sold as sex slaves in some areas, constituting an important source of income for accompanying gendarmes.[168] Some were sold in Arabian slave markets to Muslim Hajj pilgrims and ended up as far away as Tunisia or Algeria.[169]

Destination
Further information: Deir ez-Zor camps and Ras al-Ayn camps

An Armenian woman kneeling beside a dead child in a field outside of Aleppo

Khabur near Ras al-Ayn
The first arrivals in mid-1915 were accommodated in Aleppo, but from mid-November the convoys were denied access to the city and redirected along the Baghdad Railway or the Euphrates towards Mosul. The first transit camp was established at Sibil, east of Aleppo; one convoy would arrive each day while another would depart for Meskene or Deir ez-Zor.[170] There were 25 concentration camps in Syria and Upper Mesopotamia.[171] In late 1915, the camps around Aleppo were liquidated and the survivors were forced to march to Ras al-Ayn; the camps around Ras al-Ayn were closed in early 1916 and the survivors sent to Deir ez-Zor.[172]

In general, Armenians were denied food and water during and after their forced march to the Syrian desert;[173][174] many died of starvation, exhaustion, or disease, especially dysentery, typhus, and pneumonia.[173][175] In some cases local officials gave Armenians food, and in others they were able to bribe officials for food and water.[173] Aid organizations were officially barred from providing food to the deportees, although some circumvented these prohibitions.[176] Survivors testified that some Armenians refused aid as they believed it would only prolong their suffering.[177]

By October 1915, some 870,000 deportees had reached Syria and Upper Mesopotamia. Most were repeatedly transferred between camps, being held in each camp for a few weeks, until there were very few survivors.[178] This strategy physically weakened the Armenians and spread disease, so much that some camps were shut down in late 1915 due to the threat of disease spreading to the Ottoman military.[173][179] The guards raped female prisoners and also allowed Bedouins to raid the camps at night for looting and rape; some women were forced into marriage.[180][174] Childless Turks, Arabs, and Jews would come to the camps to buy Armenian children from their parents; thousands of children were sold in this manner.[178]

Armenian ability to adapt and survive was greater than the perpetrators expected.[125] A loosely organized, Armenian-led resistance network based in Aleppo succeeded in helping many deportees, saving Armenian lives.[181] At the beginning of 1916 some 500,000 deportees were alive.[157] After hearing from Matthias Erzberger that Germany expected surviving Armenians to be allowed to return home after the war, Talat Pasha ordered a second wave of massacres in early 1916.[182] More than 200,000 Armenians were killed between March and October 1916, often in remote areas near Deir ez-Zor and on parts of the Khabur valley, where their bodies would not create a public health hazard.[183][184] The massacres killed most of the Armenians who had survived the camp system.[172] Intentional, state-sponsored killing of Armenians mostly ceased by the end of January 1917, although sporadic massacres and starvation continued to kill.[185]

Confiscation of property
Main articles: Confiscation of Armenian properties in Turkey and National economy (Turkey)

Çankaya Mansion, the official residence of the president of Turkey, was confiscated from Ohannes Kasabian in 1915.[186]
A secondary motivation for genocide was the destruction of the Armenian middle class to make room for a Turkish and Muslim bourgeoisie.[135] The campaign to Turkify the economy began in June 1914 with a law that obliged many ethnic minority merchants to hire Muslims. The businesses of deported Armenians were taken over by Muslims who were often incompetent, leading to economic difficulties.[187] On 13 September 1915, the Ottoman parliament passed the "Temporary Law of Expropriation and Confiscation," formalizing commissions to redistribute property confiscated from Armenians[188] and excluding any possibility of their return.[189] Confiscated property was often used to fund the deportation of Armenians and resettlement of Muslims, as well as for army, militia, and other government spending.[190] The genocide had catastrophic effects on the Ottoman economy; Muslims were disadvantaged by the deportation of skilled professionals and entire districts fell into famine following their farmers' deportation.[191]

Confiscated Armenian properties formed much of the basis of the Republic of Turkey's economy, endowing it with capital. The dispossession and exile of Armenian competitors enabled many lower-class Turks (i.e. peasantry, soldiers, and laborers) to rise to the middle class.[192] The expropriation was part of a drive to build a statist "national economy" controlled by Muslim Turks.[193][141][194] All traces of Armenian existence, including churches and monasteries, libraries, archaeological sites, khachkars, and animal and place names, were systematically erased.[193][195][196] Confiscation of Armenian assets continued into the second half of the twentieth century.[197]

Death toll
Main article: Casualties of the Armenian genocide

Percent of prewar Armenian population "unaccounted for" in 1917 based on Talat Pasha's record. Black indicates that 100 percent of Armenians have disappeared. "Resettlement" zone is displayed in red.
The genocide reduced the Armenian population of the Ottoman Empire by 90 percent.[198] The exact number of Armenians who died is not known and is impossible to determine,[2] both contemporaries and later historians have estimated that around 1 million Armenians perished in the genocidal campaign during World War I.[3][199][200] Other estimates range from 600,000 to 1.5 million deaths.[2][3] Historians estimate that 800,000 to 1.2 million Armenians were deported.[201][202] Talat Pasha's estimates, published in 2007, gave an incomplete total of 924,158; officials' notes suggest increasing this number by 30 percent. The resulting estimate of 1.2 million deported is in line with estimates by Johannes Lepsius and Arnold J. Toynbee.[203] Based on contemporary estimates, Akçam estimated that by late 1916, only 200,000 deported Armenians were still alive.[201] Death rates varied widely by province. While in Bitlis and Trabizond 99% of the Armenian population vanished from the statistical record between 1915 and 1917, in Adana 38% were missing and the others survived in another province, or were not deported at all.[204] Suny states that "The twentieth century had not yet witnessed such a colossal loss of life directed at a particular people by a government."[205]

International reaction

Fundraising poster for Near East Relief
On 24 May 1915, the Triple Entente (Russia, Britain, and France) formally condemned the Ottoman massacres of Armenians and threatened to "hold personally responsible for those crimes all members of the Ottoman government, as well as those of its agents who will be found implicated in similar massacres".[206] This declaration was the first use of the phrase "crimes against humanity" in international diplomacy;[207] it later became a category of international criminal law after World War II.[208]

The Ottoman Empire tried to prevent journalists from reporting on the atrocities[209] and threatened foreigners who photographed the atrocities.[210] Nevertheless, substantiated reports of mass killings were widely covered in Western newspapers.[211][212] Witness testimony was published in books such as The Treatment of Armenians in the Ottoman Empire (1916) and Ambassador Morgenthau's Story (1918), which raised public awareness about the genocide.[213] The genocide was condemned by world leaders such as Woodrow Wilson, David Lloyd George, and Winston Churchill.[212][214]

Imperial Germany was a military ally of the Ottoman Empire during World War I. Germany was well aware of the genocide while it was ongoing, and its failure to intervene has been a source of controversy.[215][216]

Relief efforts were organized in dozens of countries to raise money for Armenian survivors. By 1925, people in 49 countries were organizing "Golden Rule Sundays" during which they consumed the diet of Armenian refugees, to raise money for humanitarian efforts.[217] Between 1915 and 1930, Near East Relief raised $110 million ($1.7 billion adjusted for inflation) for refugees from the Ottoman Empire.[218]

Postwar
As the British Army advanced in 1917 and 1918 northwards through the Levant, they liberated around 100,000 to 150,000 Armenians working for the Ottoman military under abysmal conditions, not including those forcibly converted and held captive by Arab tribes.[219] Following the genocide, remaining Armenians organized a coordinated effort known as vorpahavak (lit. 'the gathering of orphans') to reclaim kidnapped Armenian women and children.[220] Armenian leaders abandoned traditional patrilineality to classify these children as Armenian.[221]

An orphanage in Alexandropol held 25,000 orphans, the largest number in the world.[222] In 1920, the Armenian Patriarchate of Constantinople reported it was caring for 100,000 orphans, estimating that another 100,000 remained captive.[223] Although the postwar Ottoman government passed laws mandating the return of stolen Armenian property, in practice, 90 percent of Armenians were barred from returning to their homes, especially in Eastern Asia Minor.[224]

The 1920 Treaty of Sèvres awarded Armenia a large area in eastern Asia Minor, but was not ratified.[225]

Trials
Main articles: Prosecution of Ottoman war criminals and Ottoman Special Military Tribunal

On 4 November 1918, İkdam reported that the Three Pashas' "response to eliminate the Armenian problem was to attempt the elimination of the Armenians themselves."[226]
Following the armistice, Allied governments championed the prosecution of war criminals.[227] Grand Vizier Damat Ferid Pasha publicly recognized that 800,000 Ottoman citizens of Armenian origin had died as a result of state policy[228] and was a key figure and initiator of the Ottoman Special Military Tribunal.[229] The courts-martial relied almost entirely on documentary evidence and sworn testimony from Muslims.[230][231] Indictments focused on the crimes of "deportation and murder", which implicated all cabinet ministers, the army, and the CUP.[231] The court ruled that "the crime of mass murder" of Armenians was "organized and carried out by the top leaders of CUP".[232] Eighteen perpetrators were sentenced to death, of whom only three were ultimately executed as the remainder had fled and were tried in absentia.[231][233] Prosecution was hampered by a widespread belief among Turkish Muslims that the actions against the Armenians were not punishable crimes.[141] Increasingly, the crimes were considered necessary and justified to establish a Turkish nation-state.[234]

On 31 March 1923, the nationalist movement passed a law granting immunity to CUP war criminals.[235] The treaty of Sèvres was annulled by the Treaty of Lausanne later that year, which established Turkey's current borders and provided for the Greek population's expulsion. Its minority protection provisions had no enforcement mechanism and were disregarded in practice. Historian Hans-Lukas Kieser concludes that by agreeing to the treaty, the international community implicitly sanctioned the Armenian genocide.[236][237] On 15 March 1921, Talat Pasha was assassinated in Berlin as part of Operation Nemesis, the 1920s covert operation of the Dashnaktsutyun to kill the perpetrators of the Armenian genocide.[238][239][240] The trial of his admitted killer, Soghomon Tehlirian, focused on Talat's responsibility for genocide and became "one of the most spectacular trials of the twentieth century". Tehlirian was acquitted.[241][242]

Turkish War of Independence
In September 1918, recognizing that the empire had lost the war militarily, Talat Pasha emphasized his completion of the most important war aim: "transforming Turkey to a nation-state in Anatolia".[243] Remaining CUP cadres organized the Turkish nationalist movement to fight against both native Christian minorities and foreign powers.[244][245] Historian Raymond Kévorkian states that the Turkish War of Independence was "intended to complete the genocide by finally eradicating Armenian, Greek, and Syriac survivors".[246] Many supporters of the independence movement were perpetrators of the genocide or had profited from it, meaning that "a serious attempt to distance the republic from the genocide could have destabilized the ruling coalition on which the state depended for its stability", in the words of historian Erik-Jan Zürcher.[247] In February 1920, after capturing Marash, Kemalist forces massacred thousands of Armenian civilians.[248] Between 1922 and 1929, the Turkish authorities eliminated surviving Armenians from southern Turkey, expelling thousands to French-mandate Syria.[249]


Starving children on the street in the First Republic of Armenia
In 1918, at least 200,000 people, mostly refugees from the genocide, died from starvation or disease in the newly independent First Republic of Armenia, in part due to a Turkish blockade of food supplies.[250] Food shortages were exacerbated by the deliberate destruction of crops in Eastern Armenia by Turkish troops, both before and after the armistice.[251] From 1918 to 1920, there were revenge killings of Muslims by Armenian militants, totaling at most 40,000 to 60,000, but providing a retroactive excuse for genocide.[252][253][254] In 1920, Turkish general Kâzım Karabekir invaded Armenia with orders "to eliminate Armenia physically and politically". According to Kévorkian, only the Soviet occupation of Armenia prevented a "third phase of genocide, this time planned by the Kemalist authorities".[255]

Armenian survivors were left mainly in three locations. In the Republic of Turkey, about 100,000 Armenians lived in Constantinople and another 200,000 lived in the provinces, largely women who had been forcibly converted or married and adopted children.[256] While Armenians in the capital faced discrimination, they maintained their cultural identity, unlike those elsewhere in Turkey;[256][257] those living outside of Istanbul continued to face forced Islamization and kidnapping of girls after 1923.[258][259] In early republican Turkey, courts did not enforce the property rights that non-Muslims were granted on paper.[260] It is estimated that as many as 2 million Turkish citizens may have at least one Armenian grandparent.[261] About 295,000 Armenians had fled to Russian-controlled territory during the genocide and ended up mostly in Soviet Armenia. An estimated 200,000 Armenian refugees lived in the Middle East.[262]

The ethnic cleansing of Asia Minor—the Armenian genocide, the Assyrian genocide and the expulsion of Greeks—paved the way for the formation of an ethno-national Turkish state.[263]

Legacy
According to historian Margaret Lavinia Anderson, the Armenian genocide reached an "iconic status" as "the apex of horrors conceivable" prior to World War II.[264] It was described by contemporaries as "the greatest crime of the ages" and "the blackest page in modern history";[265][266] postwar Ottoman grand vizier Ferid said that "humanity, civilizations are shuddering, and forever will shudder, in face of this tragedy".[267] In Germany, the Nazis viewed Kemalist Turkey as a post-genocidal paradise and, according to historian Stefan Ihrig, "incorporated the Armenian genocide, its 'lessons', tactics, and 'benefits', into their own worldview".[268]

Turkey
See also: Armenian genocide denial

Talat Pasha, the architect of the genocide, was buried in 1943 at the Monument of Liberty, Istanbul as a national hero.[269]
No Turkish government has acknowledged that a crime was committed against the Armenian people[270][271][272] and all major political parties in Turkey except the Peoples' Democratic Party support Armenian genocide denial.[273] Ottoman and Turkish leaders argued, and continue to argue, that the mass deportation of Armenians was justified by national security concerns.[274][275]

For decades, Turkish school textbooks did not mention Armenians as part of Ottoman history;[276][277] more recently, textbooks have acknowledged that Armenians were subjected to mass deportation, but claimed that this action was justified, emphasizing Armenian violence.[277] Acknowledgment of the genocide is punishable under Article 301 of the Penal Code, which prohibits insulting the Turkish nation and state institutions.[278] Most Turkish citizens support the state's policies of denial,[279][280] and the word "Armenian" has become one of the worst insults in the Turkish language.[281] Many Kurds, however, who themselves have suffered political repression in Turkey, have recognized and condemned the genocide.[282][283] In 2007, Turkish-Armenian journalist Hrant Dink, who had worked to promote reconciliation and acknowledgment of the genocide, was assassinated.[284][285]

Turkey's century-long effort to prevent any recognition or mention of the genocide in foreign countries has included millions of dollars in lobbying,[286] as well as intimidation and threats.[287] The country set up multiple agencies to counter Armenian claims about the genocide.[288] Historian Donald Bloxham recognizes that since "denial has always been accompanied by rhetoric of Armenian treachery, aggression, criminality, and territorial ambition, it actually enunciates an ongoing if latent threat of Turkish 'revenge'", threatening the security of Armenia.[289]

Armenia and Azerbaijan

Aerial view of the Armenian Genocide memorial complex on a hill above Yerevan
On 24 April 1965, the fiftieth anniversary of the genocide, a hundred thousand Armenians protested in Yerevan, and diaspora Armenians demonstrated across the world in favor of recognition of the genocide and annexing land from Turkey.[290][291] A memorial was completed two years later, at Tsitsernakaberd above Yerevan.[291][292]

Since 1988, Armenians and Turkic Azeris have been involved in a protracted ethnic-territorial conflict over Nagorno-Karabakh, an Armenian enclave internationally recognized as part of Azerbaijan. Initially involving peaceful demonstrations by Armenians, the conflict turned violent and has featured massacres by both sides, resulting in the displacement of more than half million.[293][294][295] During the conflict, the Azerbaijani and Armenian governments regularly accused each other of plotting genocide.[293] Azerbaijan also joined the Turkish effort to deny the 1915 genocide.[296][297] Vicken Cheterian argues that the "unresolved historic legacy of the 1915 genocide" helped cause the Karabakh conflict and prevent its resolution, while "the ultimate crime itself continues to serve simultaneously as a model and as a threat, as well as a source of existential fear".[298]

International recognition
Main article: Armenian genocide recognition

  National legislatures that have passed resolutions recognizing the Armenian genocide
  States that deny there was an Armenian genocide
In response to continuing denial by the Turkish state, many Armenian diaspora activists have lobbied for formal recognition of the Armenian genocide, an effort that has become a central concern of the Armenian diaspora.[299][300] From the 1970s onwards, many countries avoided recognition to preserve good relations with Turkey.[301] As of 2021, 31 countries have recognized the genocide, along with Pope Francis and the European Parliament.[302][303]

Cultural depictions
Main article: Armenian genocide in culture
After meeting Armenian survivors in the Middle East, Austrian–Jewish writer Franz Werfel wrote The Forty Days of Musa Dagh (1933), a fictionalized retelling of the successful Armenian uprising in Musa Dagh, as a warning of the dangers of Nazism.[304] According to Ihrig, the book is among the most important works of twentieth-century literature to address genocide and "is still considered essential reading for Armenians worldwide".[305] The genocide became a central theme in English-language Armenian-American literature.[306] The first feature film about the Armenian genocide, Ravished Armenia, was released in 1919 as a fundraiser for Near East Relief, based on the account of survivor Aurora Mardiganian, who played herself.[307][308] The paintings of Armenian-American Arshile Gorky, a seminal figure of Abstract Expressionism, were influenced by his experience of the genocide.[309] More than 200 memorials have been erected in 32 countries to commemorate the event.[310]

Archives and historiography
The genocide is extensively documented in the Ottoman archives (despite systematic efforts to purge incriminating material and the closure of relevant archives to researchers)[311] and those of Germany, Austria, the United States, Russia, France, and the United Kingdom.[312] There are also thousands of eyewitness accounts from Western missionaries and Armenian survivors.[313][314] Polish-Jewish lawyer Raphael Lemkin, who coined the term genocide in 1944, became interested in war crimes after reading about the 1921 trial of Soghomon Tehlirian for the assassination of Talat Pasha. Lemkin recognized the fate of the Armenians as one of the main cases of genocide in the twentieth century.[315][316] The Armenian genocide is the second-most studied genocide in history after the Holocaust.[317] Almost all historians and scholars outside of Turkey, and an increasing number of Turkish scholars, recognize the destruction of Armenians in the Ottoman Empire as a genocide.[279][318]

 */

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract Turkish is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Turkish";
    string private _symbol = "TURK";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 5;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public _maxTxAmount = 5000000 * 10**6 * 10**9;
    uint256 private numTokensSellToAddToLiquidity = 500000 * 10**6 * 10**9;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

        function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }




}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405269d3c21bcecceda1000000600955600954600019816200002057fe5b0660001903600a556040518060400160405280600781526020017f5475726b69736800000000000000000000000000000000000000000000000000815250600c908051906020019062000075929190620005fe565b506040518060400160405280600481526020017f5455524b00000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c3929190620005fe565b506009600e60006101000a81548160ff021916908360ff1602179055506005600f55600f5460105560056011556011546012556001601360016101000a81548160ff02191690831515021790555069010f0cf064dd59200000601455681b1ae4d6e2ef5000006015553480156200013957600080fd5b5060006200014c620005cd60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a546003600062000201620005cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007305ff2b0db69458a0750badebc4f9e13add608c7f90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029f57600080fd5b505afa158015620002b4573d6000803e3d6000fd5b505050506040513d6020811015620002cb57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033f57600080fd5b505afa15801562000354573d6000803e3d6000fd5b505050506040513d60208110156200036b57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015620003e657600080fd5b505af1158015620003fb573d6000803e3d6000fd5b505050506040513d60208110156200041257600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b81525050600160066000620004a6620005d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200055f620005cd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a350620006a4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200064157805160ff191683800117855562000672565b8280016001018555821562000672579182015b828111156200067157825182559160200191906001019062000654565b5b50905062000681919062000685565b5090565b5b80821115620006a057600081600090555060010162000686565b5090565b60805160601c60a05160601c614e2d620006ec600039806118365280612f9e525080610ee65280613c8a5280613d765280613d9d5280613ea85280613ecf5250614e2d6000f3fe60806040526004361061021e5760003560e01c80635342acb411610123578063a457c2d7116100ab578063d543dbeb1161006f578063d543dbeb14610bab578063dd46706414610be6578063dd62ed3e14610c21578063ea2f0b3714610ca6578063f2fde38b14610cf757610225565b8063a457c2d714610a4a578063a69df4b514610abb578063a9059cbb14610ad2578063b6c5232414610b43578063c49b9a8014610b6e57610225565b80637d1db4a5116100f25780637d1db4a5146108ac57806388f82020146108d75780638da5cb5b1461093e5780638ee88c531461097f57806395d89b41146109ba57610225565b80635342acb41461079e5780636bc87c3a1461080557806370a0823114610830578063715018a61461089557610225565b80633685d419116101a6578063437823ec11610175578063437823ec146106335780634549b0391461068457806349bd5a5e146106df5780634a74bb021461072057806352390c021461074d57610225565b80633685d4191461050b578063395093511461055c5780633b124fe7146105cd5780633bd5d173146105f857610225565b80631694505e116101ed5780631694505e1461039157806318160ddd146103d257806323b872dd146103fd5780632d8381191461048e578063313ce567146104dd57610225565b8063061c82d01461022a57806306fdde0314610265578063095ea7b3146102f557806313114a9d1461036657610225565b3661022557005b600080fd5b34801561023657600080fd5b506102636004803603602081101561024d57600080fd5b8101908080359060200190929190505050610d48565b005b34801561027157600080fd5b5061027a610e1a565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102ba57808201518184015260208101905061029f565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030157600080fd5b5061034e6004803603604081101561031857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ebc565b60405180821515815260200191505060405180910390f35b34801561037257600080fd5b5061037b610eda565b6040518082815260200191505060405180910390f35b34801561039d57600080fd5b506103a6610ee4565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103de57600080fd5b506103e7610f08565b6040518082815260200191505060405180910390f35b34801561040957600080fd5b506104766004803603606081101561042057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f12565b60405180821515815260200191505060405180910390f35b34801561049a57600080fd5b506104c7600480360360208110156104b157600080fd5b8101908080359060200190929190505050610feb565b6040518082815260200191505060405180910390f35b3480156104e957600080fd5b506104f261106f565b604051808260ff16815260200191505060405180910390f35b34801561051757600080fd5b5061055a6004803603602081101561052e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611086565b005b34801561056857600080fd5b506105b56004803603604081101561057f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611410565b60405180821515815260200191505060405180910390f35b3480156105d957600080fd5b506105e26114c3565b6040518082815260200191505060405180910390f35b34801561060457600080fd5b506106316004803603602081101561061b57600080fd5b81019080803590602001909291905050506114c9565b005b34801561063f57600080fd5b506106826004803603602081101561065657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061165a565b005b34801561069057600080fd5b506106c9600480360360408110156106a757600080fd5b810190808035906020019092919080351515906020019092919050505061177d565b6040518082815260200191505060405180910390f35b3480156106eb57600080fd5b506106f4611834565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561072c57600080fd5b50610735611858565b60405180821515815260200191505060405180910390f35b34801561075957600080fd5b5061079c6004803603602081101561077057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061186b565b005b3480156107aa57600080fd5b506107ed600480360360208110156107c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b85565b60405180821515815260200191505060405180910390f35b34801561081157600080fd5b5061081a611bdb565b6040518082815260200191505060405180910390f35b34801561083c57600080fd5b5061087f6004803603602081101561085357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611be1565b6040518082815260200191505060405180910390f35b3480156108a157600080fd5b506108aa611ccc565b005b3480156108b857600080fd5b506108c1611e52565b6040518082815260200191505060405180910390f35b3480156108e357600080fd5b50610926600480360360208110156108fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e58565b60405180821515815260200191505060405180910390f35b34801561094a57600080fd5b50610953611eae565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561098b57600080fd5b506109b8600480360360208110156109a257600080fd5b8101908080359060200190929190505050611ed7565b005b3480156109c657600080fd5b506109cf611fa9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a0f5780820151818401526020810190506109f4565b50505050905090810190601f168015610a3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610a5657600080fd5b50610aa360048036036040811015610a6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204b565b60405180821515815260200191505060405180910390f35b348015610ac757600080fd5b50610ad0612118565b005b348015610ade57600080fd5b50610b2b60048036036040811015610af557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612335565b60405180821515815260200191505060405180910390f35b348015610b4f57600080fd5b50610b58612353565b6040518082815260200191505060405180910390f35b348015610b7a57600080fd5b50610ba960048036036020811015610b9157600080fd5b8101908080351515906020019092919050505061235d565b005b348015610bb757600080fd5b50610be460048036036020811015610bce57600080fd5b810190808035906020019092919050505061247b565b005b348015610bf257600080fd5b50610c1f60048036036020811015610c0957600080fd5b8101908080359060200190929190505050612574565b005b348015610c2d57600080fd5b50610c9060048036036040811015610c4457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612765565b6040518082815260200191505060405180910390f35b348015610cb257600080fd5b50610cf560048036036020811015610cc957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127ec565b005b348015610d0357600080fd5b50610d4660048036036020811015610d1a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061290f565b005b610d50612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e10576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050505050905090565b6000610ed0610ec9612b1a565b8484612b22565b6001905092915050565b6000600b54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610f1f848484612d19565b610fe084610f2b612b1a565b610fdb85604051806060016040528060288152602001614cea60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f91612b1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130de9092919063ffffffff16565b612b22565b600190509392505050565b6000600a54821115611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614c2f602a913960400191505060405180910390fd5b600061105261319e565b905061106781846131c990919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61108e612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b60088054905081101561140c578173ffffffffffffffffffffffffffffffffffffffff166008828154811061124157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113ff5760086001600880549050038154811061129d57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106112d557fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806113c557fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561140c565b8080600101915050611210565b5050565b60006114b961141d612b1a565b846114b4856005600061142e612b1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b612b22565b6001905092915050565b600f5481565b60006114d3612b1a565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614d84602c913960400191505060405180910390fd5b60006115838361329b565b505050505090506115dc81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061163481600a546132f790919063ffffffff16565b600a8190555061164f83600b5461321390919063ffffffff16565b600b81905550505050565b611662612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611722576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156117f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816118175760006118078461329b565b505050505090508091505061182e565b60006118228461329b565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601360019054906101000a900460ff1681565b611873612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611933576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611ac757611a83600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610feb565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c7c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611cc7565b611cc4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610feb565b90505b919050565b611cd4612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60145481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611edf612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120415780601f1061201657610100808354040283529160200191612041565b820191906000526020600020905b81548152906001019060200180831161202457829003601f168201915b5050505050905090565b600061210e612058612b1a565b8461210985604051806060016040528060258152602001614dd36025913960056000612082612b1a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130de9092919063ffffffff16565b612b22565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614db06023913960400191505060405180910390fd5b6002544211612235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612349612342612b1a565b8484612d19565b6001905092915050565b6000600254905090565b612365612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601360016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612483612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612543576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61256b606461255d8360095461334190919063ffffffff16565b6131c990919063ffffffff16565b60148190555050565b61257c612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461263c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6127f4612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612917612b1a565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614c596026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180614d606024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180614c7f6022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180614d3b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180614c0c6023913960400191505060405180910390fd5b60008111612e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180614d126029913960400191505060405180910390fd5b612e86611eae565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ef45750612ec4611eae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f5557601454811115612f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614ca16028913960400191505060405180910390fd5b5b6000612f6030611be1565b90506014548110612f715760145490505b60006015548210159050808015612f955750601360009054906101000a900460ff16155b8015612fed57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130055750601360019054906101000a900460ff165b15613019576015549150613018826133c7565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130c05750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130ca57600090505b6130d6868686846134a9565b505050505050565b600083831115829061318b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613150578082015181840152602081019050613135565b50505050905090810190601f16801561317d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006131ab6137ba565b915091506131c281836131c990919063ffffffff16565b9250505090565b600061320b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a4b565b905092915050565b600080828401905083811015613291576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b60008060008060008060008060006132b28a613b11565b92509250925060008060006132d08d86866132cb61319e565b613b6b565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b600061333983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130de565b905092915050565b60008083141561335457600090506133c1565b600082840290508284828161336557fe5b04146133bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180614cc96021913960400191505060405180910390fd5b809150505b92915050565b6001601360006101000a81548160ff02191690831515021790555060006133f86002836131c990919063ffffffff16565b9050600061340f82846132f790919063ffffffff16565b9050600047905061341f83613bf4565b600061343482476132f790919063ffffffff16565b90506134408382613ea2565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b806134b7576134b6613ff3565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356f5761356a848484614036565b6137a6565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136125750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362757613622848484614296565b6137a5565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136cb5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136e0576136db8484846144f6565b6137a4565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137825750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613797576137928484846146c1565b6137a3565b6137a28484846144f6565b5b5b5b5b806137b4576137b36149b6565b5b50505050565b6000806000600a5490506000600954905060005b600880549050811015613a0e578260036000600884815481106137ed57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806138d4575081600460006008848154811061386c57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156138eb57600a5460095494509450505050613a47565b61397460036000600884815481106138ff57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846132f790919063ffffffff16565b92506139ff600460006008848154811061398a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836132f790919063ffffffff16565b915080806001019150506137ce565b50613a26600954600a546131c990919063ffffffff16565b821015613a3e57600a54600954935093505050613a47565b81819350935050505b9091565b60008083118290613af7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613abc578082015181840152602081019050613aa1565b50505050905090810190601f168015613ae95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613b0357fe5b049050809150509392505050565b600080600080613b20856149ca565b90506000613b2d866149fb565b90506000613b5682613b48858a6132f790919063ffffffff16565b6132f790919063ffffffff16565b90508083839550955095505050509193909250565b600080600080613b84858961334190919063ffffffff16565b90506000613b9b868961334190919063ffffffff16565b90506000613bb2878961334190919063ffffffff16565b90506000613bdb82613bcd85876132f790919063ffffffff16565b6132f790919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff81118015613c0e57600080fd5b50604051908082528060200260200182016040528015613c3d5781602001602082028036833780820191505090505b5090503081600081518110613c4e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613cee57600080fd5b505afa158015613d02573d6000803e3d6000fd5b505050506040513d6020811015613d1857600080fd5b810190808051906020019092919050505081600181518110613d3657fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d9b307f000000000000000000000000000000000000000000000000000000000000000084612b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015613e5d578082015181840152602081019050613e42565b505050509050019650505050505050600060405180830381600087803b158015613e8657600080fd5b505af1158015613e9a573d6000803e3d6000fd5b505050505050565b613ecd307f000000000000000000000000000000000000000000000000000000000000000084612b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613f17611eae565b426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b158015613f9c57600080fd5b505af1158015613fb0573d6000803e3d6000fd5b50505050506040513d6060811015613fc757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f5414801561400757506000601154145b1561401157614034565b600f546010819055506011546012819055506000600f8190555060006011819055505b565b6000806000806000806140488761329b565b9550955095509550955095506140a687600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061413b86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421c81614a2c565b6142268483614bd1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806142a88761329b565b95509550955095509550955061430686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061439b83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061443085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061447c81614a2c565b6144868483614bd1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806145088761329b565b95509550955095509550955061456686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145fb85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464781614a2c565b6146518483614bd1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806146d38761329b565b95509550955095509550955061473187600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506147c686600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132f790919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061485b83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148f085600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061493c81614a2c565b6149468483614bd1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550565b60006149f460646149e6600f548561334190919063ffffffff16565b6131c990919063ffffffff16565b9050919050565b6000614a256064614a176011548561334190919063ffffffff16565b6131c990919063ffffffff16565b9050919050565b6000614a3661319e565b90506000614a4d828461334190919063ffffffff16565b9050614aa181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614bcc57614b8883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461321390919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b614be682600a546132f790919063ffffffff16565b600a81905550614c0181600b5461321390919063ffffffff16565b600b81905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b50ccb75fccae3860f34b00f9392a8959a4746ceb3a482b50261398364f5596264736f6c634300060c0033

Deployed ByteCode Sourcemap

77721:18149:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85100:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;80055:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80967:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;82088:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;78665:51;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;80332:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;81136:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;83012:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;80241:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;83728:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;81457:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;78481:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;82183:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;84863:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;82568:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;78723:38;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;78798:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;83273:447;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88944:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;78564:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;80435:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;68320:148;;;;;;;;;;;;;:::i;:::-;;78847:53;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;81960:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;67677:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;85206:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;80146:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;81683:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;69326:293;;;;;;;;;;;;;:::i;:::-;;80641:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;68875:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;85506:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;85336:162;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;69040:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;80816:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;84982:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;68623:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;85100:98;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85184:6:::1;85174:7;:16;;;;85100:98:::0;:::o;80055:83::-;80092:13;80125:5;80118:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80055:83;:::o;80967:161::-;81042:4;81059:39;81068:12;:10;:12::i;:::-;81082:7;81091:6;81059:8;:39::i;:::-;81116:4;81109:11;;80967:161;;;;:::o;82088:87::-;82130:7;82157:10;;82150:17;;82088:87;:::o;78665:51::-;;;:::o;80332:95::-;80385:7;80412;;80405:14;;80332:95;:::o;81136:313::-;81234:4;81251:36;81261:6;81269:9;81280:6;81251:9;:36::i;:::-;81298:121;81307:6;81315:12;:10;:12::i;:::-;81329:89;81367:6;81329:89;;;;;;;;;;;;;;;;;:11;:19;81341:6;81329:19;;;;;;;;;;;;;;;:33;81349:12;:10;:12::i;:::-;81329:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;81298:8;:121::i;:::-;81437:4;81430:11;;81136:313;;;;;:::o;83012:253::-;83078:7;83117;;83106;:18;;83098:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83182:19;83205:10;:8;:10::i;:::-;83182:33;;83233:24;83245:11;83233:7;:11;;:24;;;;:::i;:::-;83226:31;;;83012:253;;;:::o;80241:83::-;80282:5;80307:9;;;;;;;;;;;80300:16;;80241:83;:::o;83728:479::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83810:11:::1;:20;83822:7;83810:20;;;;;;;;;;;;;;;;;;;;;;;;;83802:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;83878:9;83873:327;83897:9;:16;;;;83893:1;:20;83873:327;;;83955:7;83939:23;;:9;83949:1;83939:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;83935:254;;;83998:9;84027:1;84008:9;:16;;;;:20;83998:31;;;;;;;;;;;;;;;;;;;;;;;;;83983:9;83993:1;83983:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;84067:1;84048:7;:16;84056:7;84048:16;;;;;;;;;;;;;;;:20;;;;84110:5;84087:11;:20;84099:7;84087:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;84134:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;84168:5;;83935:254;83915:3;;;;;;;83873:327;;;;83728:479:::0;:::o;81457:218::-;81545:4;81562:83;81571:12;:10;:12::i;:::-;81585:7;81594:50;81633:10;81594:11;:25;81606:12;:10;:12::i;:::-;81594:25;;;;;;;;;;;;;;;:34;81620:7;81594:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;81562:8;:83::i;:::-;81663:4;81656:11;;81457:218;;;;:::o;78481:26::-;;;;:::o;82183:377::-;82235:14;82252:12;:10;:12::i;:::-;82235:29;;82284:11;:19;82296:6;82284:19;;;;;;;;;;;;;;;;;;;;;;;;;82283:20;82275:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;82364:15;82388:19;82399:7;82388:10;:19::i;:::-;82363:44;;;;;;;82436:28;82456:7;82436;:15;82444:6;82436:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;82418:7;:15;82426:6;82418:15;;;;;;;;;;;;;;;:46;;;;82485:20;82497:7;82485;;:11;;:20;;;;:::i;:::-;82475:7;:30;;;;82529:23;82544:7;82529:10;;:14;;:23;;;;:::i;:::-;82516:10;:36;;;;82183:377;;;:::o;84863:111::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;84962:4:::1;84932:18;:27;84951:7;84932:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;84863:111:::0;:::o;82568:436::-;82658:7;82697;;82686;:18;;82678:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;82756:17;82751:246;;82791:15;82815:19;82826:7;82815:10;:19::i;:::-;82790:44;;;;;;;82856:7;82849:14;;;;;82751:246;82898:23;82929:19;82940:7;82929:10;:19::i;:::-;82896:52;;;;;;;82970:15;82963:22;;;82568:436;;;;;:::o;78723:38::-;;;:::o;78798:40::-;;;;;;;;;;;;;:::o;83273:447::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83470:11:::1;:20;83482:7;83470:20;;;;;;;;;;;;;;;;;;;;;;;;;83469:21;83461:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;83555:1;83536:7;:16;83544:7;83536:16;;;;;;;;;;;;;;;;:20;83533:108;;;83592:37;83612:7;:16;83620:7;83612:16;;;;;;;;;;;;;;;;83592:19;:37::i;:::-;83573:7;:16;83581:7;83573:16;;;;;;;;;;;;;;;:56;;;;83533:108;83674:4;83651:11;:20;83663:7;83651:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;83689:9;83704:7;83689:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;83273:447:::0;:::o;88944:123::-;89008:4;89032:18;:27;89051:7;89032:27;;;;;;;;;;;;;;;;;;;;;;;;;89025:34;;88944:123;;;:::o;78564:32::-;;;;:::o;80435:198::-;80501:7;80525:11;:20;80537:7;80525:20;;;;;;;;;;;;;;;;;;;;;;;;;80521:49;;;80554:7;:16;80562:7;80554:16;;;;;;;;;;;;;;;;80547:23;;;;80521:49;80588:37;80608:7;:16;80616:7;80608:16;;;;;;;;;;;;;;;;80588:19;:37::i;:::-;80581:44;;80435:198;;;;:::o;68320:148::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68427:1:::1;68390:40;;68411:6;::::0;::::1;;;;;;;;68390:40;;;;;;;;;;;;68458:1;68441:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;68320:148::o:0;78847:53::-;;;;:::o;81960:120::-;82028:4;82052:11;:20;82064:7;82052:20;;;;;;;;;;;;;;;;;;;;;;;;;82045:27;;81960:120;;;:::o;67677:79::-;67715:7;67742:6;;;;;;;;;;;67735:13;;67677:79;:::o;85206:122::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85308:12:::1;85292:13;:28;;;;85206:122:::0;:::o;80146:87::-;80185:13;80218:7;80211:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;80146:87;:::o;81683:269::-;81776:4;81793:129;81802:12;:10;:12::i;:::-;81816:7;81825:96;81864:15;81825:96;;;;;;;;;;;;;;;;;:11;:25;81837:12;:10;:12::i;:::-;81825:25;;;;;;;;;;;;;;;:34;81851:7;81825:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;81793:8;:129::i;:::-;81940:4;81933:11;;81683:269;;;;:::o;69326:293::-;69396:10;69378:28;;:14;;;;;;;;;;;:28;;;69370:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69471:9;;69465:3;:15;69457:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69562:14;;;;;;;;;;;69533:44;;69554:6;;;;;;;;;;69533:44;;;;;;;;;;;;69597:14;;;;;;;;;;;69588:6;;:23;;;;;;;;;;;;;;;;;;69326:293::o;80641:167::-;80719:4;80736:42;80746:12;:10;:12::i;:::-;80760:9;80771:6;80736:9;:42::i;:::-;80796:4;80789:11;;80641:167;;;;:::o;68875:89::-;68920:7;68947:9;;68940:16;;68875:89;:::o;85506:171::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85607:8:::1;85583:21;;:32;;;;;;;;;;;;;;;;;;85631:38;85660:8;85631:38;;;;;;;;;;;;;;;;;;;;85506:171:::0;:::o;85336:162::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85430:60:::1;85474:5;85430:25;85442:12;85430:7;;:11;;:25;;;;:::i;:::-;:29;;:60;;;;:::i;:::-;85415:12;:75;;;;85336:162:::0;:::o;69040:214::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69121:6:::1;::::0;::::1;;;;;;;;69104:14;;:23;;;;;;;;;;;;;;;;;;69155:1;69138:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;69186:4;69180:3;:10;69168:9;:22;;;;69243:1;69206:40;;69227:6;::::0;::::1;;;;;;;;69206:40;;;;;;;;;;;;69040:214:::0;:::o;80816:143::-;80897:7;80924:11;:18;80936:5;80924:18;;;;;;;;;;;;;;;:27;80943:7;80924:27;;;;;;;;;;;;;;;;80917:34;;80816:143;;;;:::o;84982:110::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85079:5:::1;85049:18;:27;85068:7;85049:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;84982:110:::0;:::o;68623:244::-;67899:12;:10;:12::i;:::-;67889:22;;:6;;;;;;;;;;:22;;;67881:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68732:1:::1;68712:22;;:8;:22;;;;68704:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68822:8;68793:38;;68814:6;::::0;::::1;;;;;;;;68793:38;;;;;;;;;;;;68851:8;68842:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;68623:244:::0;:::o;60085:106::-;60138:15;60173:10;60166:17;;60085:106;:::o;89075:337::-;89185:1;89168:19;;:5;:19;;;;89160:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89266:1;89247:21;;:7;:21;;;;89239:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89350:6;89320:11;:18;89332:5;89320:18;;;;;;;;;;;;;;;:27;89339:7;89320:27;;;;;;;;;;;;;;;:36;;;;89388:7;89372:32;;89381:5;89372:32;;;89397:6;89372:32;;;;;;;;;;;;;;;;;;89075:337;;;:::o;89420:1773::-;89558:1;89542:18;;:4;:18;;;;89534:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89635:1;89621:16;;:2;:16;;;;89613:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89705:1;89696:6;:10;89688:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89774:7;:5;:7::i;:::-;89766:15;;:4;:15;;;;:32;;;;;89791:7;:5;:7::i;:::-;89785:13;;:2;:13;;;;89766:32;89763:125;;;89831:12;;89821:6;:22;;89813:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89763:125;90183:28;90214:24;90232:4;90214:9;:24::i;:::-;90183:55;;90278:12;;90254:20;:36;90251:112;;90339:12;;90316:35;;90251:112;90375:24;90426:29;;90402:20;:53;;90375:80;;90484:19;:53;;;;;90521:16;;;;;;;;;;;90520:17;90484:53;:91;;;;;90562:13;90554:21;;:4;:21;;;;90484:91;:129;;;;;90592:21;;;;;;;;;;;90484:129;90466:318;;;90663:29;;90640:52;;90736:36;90751:20;90736:14;:36::i;:::-;90466:318;90857:12;90872:4;90857:19;;90976:18;:24;90995:4;90976:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;91004:18;:22;91023:2;91004:22;;;;;;;;;;;;;;;;;;;;;;;;;90976:50;90973:96;;;91052:5;91042:15;;90973:96;91147:38;91162:4;91167:2;91170:6;91177:7;91147:14;:38::i;:::-;89420:1773;;;;;;:::o;56495:192::-;56581:7;56614:1;56609;:6;;56617:12;56601:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56641:9;56657:1;56653;:5;56641:17;;56678:1;56671:8;;;56495:192;;;;;:::o;87136:163::-;87177:7;87198:15;87215;87234:19;:17;:19::i;:::-;87197:56;;;;87271:20;87283:7;87271;:11;;:20;;;;:::i;:::-;87264:27;;;;87136:163;:::o;57893:132::-;57951:7;57978:39;57982:1;57985;57978:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;57971:46;;57893:132;;;;:::o;55592:181::-;55650:7;55670:9;55686:1;55682;:5;55670:17;;55711:1;55706;:6;;55698:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55764:1;55757:8;;;55592:181;;;;:::o;85934:419::-;85993:7;86002;86011;86020;86029;86038;86059:23;86084:12;86098:18;86120:20;86132:7;86120:11;:20::i;:::-;86058:82;;;;;;86152:15;86169:23;86194:12;86210:50;86222:7;86231:4;86237:10;86249;:8;:10::i;:::-;86210:11;:50::i;:::-;86151:109;;;;;;86279:7;86288:15;86305:4;86311:15;86328:4;86334:10;86271:74;;;;;;;;;;;;;;;;;;85934:419;;;;;;;:::o;56056:136::-;56114:7;56141:43;56145:1;56148;56141:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;56134:50;;56056:136;;;;:::o;56946:471::-;57004:7;57254:1;57249;:6;57245:47;;;57279:1;57272:8;;;;57245:47;57304:9;57320:1;57316;:5;57304:17;;57349:1;57344;57340;:5;;;;;;:10;57332:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57408:1;57401:8;;;56946:471;;;;;:::o;91201:977::-;79295:4;79276:16;;:23;;;;;;;;;;;;;;;;;;91337:12:::1;91352:27;91377:1;91352:20;:24;;:27;;;;:::i;:::-;91337:42;;91390:17;91410:30;91435:4;91410:20;:24;;:30;;;;:::i;:::-;91390:50;;91718:22;91743:21;91718:46;;91809:22;91826:4;91809:16;:22::i;:::-;91962:18;91983:41;92009:14;91983:21;:25;;:41;;;;:::i;:::-;91962:62;;92074:35;92087:9;92098:10;92074:12;:35::i;:::-;92127:43;92142:4;92148:10;92160:9;92127:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;79310:1;;;;79341:5:::0;79322:16;;:24;;;;;;;;;;;;;;;;;;91201:977;:::o;93377:818::-;93488:7;93484:40;;93510:14;:12;:14::i;:::-;93484:40;93541:11;:19;93553:6;93541:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;93565:11;:22;93577:9;93565:22;;;;;;;;;;;;;;;;;;;;;;;;;93564:23;93541:46;93537:597;;;93604:48;93626:6;93634:9;93645:6;93604:21;:48::i;:::-;93537:597;;;93675:11;:19;93687:6;93675:19;;;;;;;;;;;;;;;;;;;;;;;;;93674:20;:46;;;;;93698:11;:22;93710:9;93698:22;;;;;;;;;;;;;;;;;;;;;;;;;93674:46;93670:464;;;93737:46;93757:6;93765:9;93776:6;93737:19;:46::i;:::-;93670:464;;;93806:11;:19;93818:6;93806:19;;;;;;;;;;;;;;;;;;;;;;;;;93805:20;:47;;;;;93830:11;:22;93842:9;93830:22;;;;;;;;;;;;;;;;;;;;;;;;;93829:23;93805:47;93801:333;;;93869:44;93887:6;93895:9;93906:6;93869:17;:44::i;:::-;93801:333;;;93935:11;:19;93947:6;93935:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;93958:11;:22;93970:9;93958:22;;;;;;;;;;;;;;;;;;;;;;;;;93935:45;93931:203;;;93997:48;94019:6;94027:9;94038:6;93997:21;:48::i;:::-;93931:203;;;94078:44;94096:6;94104:9;94115:6;94078:17;:44::i;:::-;93931:203;93801:333;93670:464;93537:597;94150:7;94146:41;;94172:15;:13;:15::i;:::-;94146:41;93377:818;;;;:::o;87307:555::-;87357:7;87366;87386:15;87404:7;;87386:25;;87422:15;87440:7;;87422:25;;87463:9;87458:289;87482:9;:16;;;;87478:1;:20;87458:289;;;87548:7;87524;:21;87532:9;87542:1;87532:12;;;;;;;;;;;;;;;;;;;;;;;;;87524:21;;;;;;;;;;;;;;;;:31;:66;;;;87583:7;87559;:21;87567:9;87577:1;87567:12;;;;;;;;;;;;;;;;;;;;;;;;;87559:21;;;;;;;;;;;;;;;;:31;87524:66;87520:97;;;87600:7;;87609;;87592:25;;;;;;;;;87520:97;87642:34;87654:7;:21;87662:9;87672:1;87662:12;;;;;;;;;;;;;;;;;;;;;;;;;87654:21;;;;;;;;;;;;;;;;87642:7;:11;;:34;;;;:::i;:::-;87632:44;;87701:34;87713:7;:21;87721:9;87731:1;87721:12;;;;;;;;;;;;;;;;;;;;;;;;;87713:21;;;;;;;;;;;;;;;;87701:7;:11;;:34;;;;:::i;:::-;87691:44;;87500:3;;;;;;;87458:289;;;;87771:20;87783:7;;87771;;:11;;:20;;;;:::i;:::-;87761:7;:30;87757:61;;;87801:7;;87810;;87793:25;;;;;;;;87757:61;87837:7;87846;87829:25;;;;;;87307:555;;;:::o;58521:278::-;58607:7;58639:1;58635;:5;58642:12;58627:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58666:9;58682:1;58678;:5;;;;;;58666:17;;58790:1;58783:8;;;58521:278;;;;;:::o;86361:330::-;86421:7;86430;86439;86459:12;86474:24;86490:7;86474:15;:24::i;:::-;86459:39;;86509:18;86530:30;86552:7;86530:21;:30::i;:::-;86509:51;;86571:23;86597:33;86619:10;86597:17;86609:4;86597:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;86571:59;;86649:15;86666:4;86672:10;86641:42;;;;;;;;;86361:330;;;;;:::o;86699:429::-;86814:7;86823;86832;86852:15;86870:24;86882:11;86870:7;:11;;:24;;;;:::i;:::-;86852:42;;86905:12;86920:21;86929:11;86920:4;:8;;:21;;;;:::i;:::-;86905:36;;86952:18;86973:27;86988:11;86973:10;:14;;:27;;;;:::i;:::-;86952:48;;87011:23;87037:33;87059:10;87037:17;87049:4;87037:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;87011:59;;87089:7;87098:15;87115:4;87081:39;;;;;;;;;;86699:429;;;;;;;;:::o;92186:589::-;92312:21;92350:1;92336:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92312:40;;92381:4;92363;92368:1;92363:7;;;;;;;;;;;;;:23;;;;;;;;;;;92407:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92397:4;92402:1;92397:7;;;;;;;;;;;;;:32;;;;;;;;;;;92442:62;92459:4;92474:15;92492:11;92442:8;:62::i;:::-;92543:15;:66;;;92624:11;92650:1;92694:4;92721;92741:15;92543:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92186:589;;:::o;92783:513::-;92931:62;92948:4;92963:15;92981:11;92931:8;:62::i;:::-;93036:15;:31;;;93075:9;93108:4;93128:11;93154:1;93197;93240:7;:5;:7::i;:::-;93262:15;93036:252;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;92783:513;;:::o;88569:234::-;88626:1;88615:7;;:12;:34;;;;;88648:1;88631:13;;:18;88615:34;88612:46;;;88651:7;;88612:46;88688:7;;88670:15;:25;;;;88730:13;;88706:21;:37;;;;88766:1;88756:7;:11;;;;88794:1;88778:13;:17;;;;88569:234;:::o;95296:563::-;95399:15;95416:23;95441:12;95455:23;95480:12;95494:18;95516:19;95527:7;95516:10;:19::i;:::-;95398:137;;;;;;;;;;;;95564:28;95584:7;95564;:15;95572:6;95564:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;95546:7;:15;95554:6;95546:15;;;;;;;;;;;;;;;:46;;;;95621:28;95641:7;95621;:15;95629:6;95621:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;95603:7;:15;95611:6;95603:15;;;;;;;;;;;;;;;:46;;;;95681:39;95704:15;95681:7;:18;95689:9;95681:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;95660:7;:18;95668:9;95660:18;;;;;;;;;;;;;;;:60;;;;95731:26;95746:10;95731:14;:26::i;:::-;95768:23;95780:4;95786;95768:11;:23::i;:::-;95824:9;95807:44;;95816:6;95807:44;;;95835:15;95807:44;;;;;;;;;;;;;;;;;;95296:563;;;;;;;;;:::o;94713:575::-;94814:15;94831:23;94856:12;94870:23;94895:12;94909:18;94931:19;94942:7;94931:10;:19::i;:::-;94813:137;;;;;;;;;;;;94979:28;94999:7;94979;:15;94987:6;94979:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;94961:7;:15;94969:6;94961:15;;;;;;;;;;;;;;;:46;;;;95039:39;95062:15;95039:7;:18;95047:9;95039:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;95018:7;:18;95026:9;95018:18;;;;;;;;;;;;;;;:60;;;;95110:39;95133:15;95110:7;:18;95118:9;95110:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;95089:7;:18;95097:9;95089:18;;;;;;;;;;;;;;;:60;;;;95160:26;95175:10;95160:14;:26::i;:::-;95197:23;95209:4;95215;95197:11;:23::i;:::-;95253:9;95236:44;;95245:6;95236:44;;;95264:15;95236:44;;;;;;;;;;;;;;;;;;94713:575;;;;;;;;;:::o;94203:502::-;94302:15;94319:23;94344:12;94358:23;94383:12;94397:18;94419:19;94430:7;94419:10;:19::i;:::-;94301:137;;;;;;;;;;;;94467:28;94487:7;94467;:15;94475:6;94467:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;94449:7;:15;94457:6;94449:15;;;;;;;;;;;;;;;:46;;;;94527:39;94550:15;94527:7;:18;94535:9;94527:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;94506:7;:18;94514:9;94506:18;;;;;;;;;;;;;;;:60;;;;94577:26;94592:10;94577:14;:26::i;:::-;94614:23;94626:4;94632;94614:11;:23::i;:::-;94670:9;94653:44;;94662:6;94653:44;;;94681:15;94653:44;;;;;;;;;;;;;;;;;;94203:502;;;;;;;;;:::o;84217:634::-;84320:15;84337:23;84362:12;84376:23;84401:12;84415:18;84437:19;84448:7;84437:10;:19::i;:::-;84319:137;;;;;;;;;;;;84485:28;84505:7;84485;:15;84493:6;84485:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;84467:7;:15;84475:6;84467:15;;;;;;;;;;;;;;;:46;;;;84542:28;84562:7;84542;:15;84550:6;84542:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;84524:7;:15;84532:6;84524:15;;;;;;;;;;;;;;;:46;;;;84602:39;84625:15;84602:7;:18;84610:9;84602:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;84581:7;:18;84589:9;84581:18;;;;;;;;;;;;;;;:60;;;;84673:39;84696:15;84673:7;:18;84681:9;84673:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;84652:7;:18;84660:9;84652:18;;;;;;;;;;;;;;;:60;;;;84723:26;84738:10;84723:14;:26::i;:::-;84760:23;84772:4;84778;84760:11;:23::i;:::-;84816:9;84799:44;;84808:6;84799:44;;;84827:15;84799:44;;;;;;;;;;;;;;;;;;84217:634;;;;;;;;;:::o;88811:125::-;88865:15;;88855:7;:25;;;;88907:21;;88891:13;:37;;;;88811:125::o;88233:154::-;88297:7;88324:55;88363:5;88324:20;88336:7;;88324;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;88317:62;;88233:154;;;:::o;88395:166::-;88465:7;88492:61;88537:5;88492:26;88504:13;;88492:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;88485:68;;88395:166;;;:::o;87870:355::-;87933:19;87956:10;:8;:10::i;:::-;87933:33;;87977:18;87998:27;88013:11;87998:10;:14;;:27;;;;:::i;:::-;87977:48;;88061:38;88088:10;88061:7;:22;88077:4;88061:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;88036:7;:22;88052:4;88036:22;;;;;;;;;;;;;;;:63;;;;88113:11;:26;88133:4;88113:26;;;;;;;;;;;;;;;;;;;;;;;;;88110:107;;;88179:38;88206:10;88179:7;:22;88195:4;88179:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;88154:7;:22;88170:4;88154:22;;;;;;;;;;;;;;;:63;;;;88110:107;87870:355;;;:::o;85779:147::-;85857:17;85869:4;85857:7;;:11;;:17;;;;:::i;:::-;85847:7;:27;;;;85898:20;85913:4;85898:10;;:14;;:20;;;;:::i;:::-;85885:10;:33;;;;85779:147;;:::o

Swarm Source

ipfs://b50ccb75fccae3860f34b00f9392a8959a4746ceb3a482b50261398364f55962
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.