solc-0.8.36-doubleshift20 0xfe89fd96f270ac3c0f11921af0390dbb1340f704 optimized-high-runs
31129 bytes
608060405234801561000f575f5ffd5b50600436106103f3575f3560e01c80639f9b19901161020f578063cc0e1c1c1161012e578063e840427d116100c3578063f701f06e11610093578063f899860511610079578063f89986051461110a578063f91ebd5214611124578063fce56a0b1461112c575f5ffd5b8063f701f06e14610f69578063f8447aaf146110f7575f5ffd5b8063e840427d14610d03578063eac8f5b814610d16578063efdba7c014610f43578063f51f1a3514610f56575f5ffd5b8063d6abe642116100fe578063d6abe64214610ad6578063de079b5714610ae9578063de31ea9f14610b7b578063e5c9274514610caf575f5ffd5b8063cc0e1c1c14610a60578063ceb233b314610a73578063d3c6a11d14610a86578063d5d15a1114610a99575f5ffd5b8063b33454e5116101a4578063c04d164e11610174578063c04d164e146109b2578063c25d82fe146109c5578063c435e928146109d8578063c4d66de814610a4d575f5ffd5b8063b33454e51461092e578063b5f460c81461094f578063be10528014610962578063bf7e214f14610975575f5ffd5b8063a436458d116101df578063a436458d146108c1578063a467cc59146108d4578063aab9eb07146108e7578063b0745f2b146108fa575f5ffd5b80639f9b199014610855578063a0aead4d14610885578063a0b3d9d81461088c578063a2763d29146108ae575f5ffd5b80633a445c4e116103155780637658c644116102aa57806383e4bcb71161027a5780638accc4a3116102605780638accc4a3146107f65780638fb36037146108095780639c7ee64f14610842575f5ffd5b806383e4bcb7146107d057806387a7dc77146107e3575f5ffd5b80637658c64414610764578063771602f7146107975780637a9e5e4b146107aa57806380c099f4146107bd575f5ffd5b806358a54078116102e557806358a54078146106d85780635e39616d146106eb5780635ff1c482146106fe5780637333a3b414610751575f5ffd5b80633a445c4e146106585780633c9a9ee51461066b578063403d77781461067e57806341a009eb14610691575f5ffd5b806321a3bebc1161038b5780632a5b38031161035b5780632a5b3803146105bf57806333697066146105d2578063341f7dcf146105f05780633992163714610603575f5ffd5b806321a3bebc14610526578063228e731f1461058657806324ba667f1461059957806324e4c1af146105ac575f5ffd5b8063132a8bea116103c6578063132a8bea146104a0578063152ee0d3146104d85780631901057d146105005780631e83287e14610513575f5ffd5b8063033a0695146103f7578063066dd8301461041d5780630752c44c146104325780630c90e7fe14610445575b5f5ffd5b61040a610405366004616cfa565b6112fa565b6040519081526020015b60405180910390f35b61043061042b366004616d11565b611377565b005b61040a610440366004616cfa565b611564565b610490610453366004616d54565b73ffffffffffffffffffffffffffffffffffffffff9081165f81815260046020908152604080832054835260019091529020600501549091161490565b6040519015158152602001610414565b6104b36104ae366004616d11565b61158b565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610414565b6104eb6104e6366004616cfa565b6115ab565b60408051928352602083019190915201610414565b61049061050e366004616d6d565b6115e5565b61040a610521366004616dd5565b6115fc565b61040a610534366004616d6d565b5f91825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290206003015478ffffffffffffffffffffffffffffffffffffffffffffffffff1690565b61040a610594366004616d11565b611f4b565b61040a6105a7366004616cfa565b611f62565b6104306105ba366004616e5d565b611f78565b61040a6105cd366004616ef2565b61250e565b6105dc62ffffff81565b60405162ffffff9091168152602001610414565b6104306105fe366004616f25565b612807565b6104eb610611366004616cfa565b5f90815260016020526040902060038101546002909101546f010000000000000000000000000000009091046effffffffffffffffffffffffffffff169160189190910b90565b61040a610666366004616d11565b612926565b6104eb610679366004616d6d565b61293d565b61040a61068c366004616cfa565b612997565b61040a61069f366004616cfa565b5f90815260016020819052604090912001546f0100000000000000000000000000000090046effffffffffffffffffffffffffffff1690565b61040a6106e6366004616cfa565b6129e8565b61040a6106f9366004616d11565b6129fe565b61040a61070c366004616d6d565b5f91825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931684529190529020546effffffffffffffffffffffffffffff1690565b61043061075f366004616d11565b612a15565b61040a610772366004616cfa565b5f908152600160205260409020600301546effffffffffffffffffffffffffffff1690565b61040a6107a5366004616d11565b612c74565b6104306107b8366004616d54565b612f70565b61040a6107cb366004616d11565b6130a0565b6104306107de366004616d11565b6130b7565b6104306107f1366004616f47565b613192565b61040a610804366004616cfa565b613259565b61081161327b565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610414565b61040a610850366004616d6d565b6132ee565b61040a610863366004616cfa565b5f908152600160205260409020546effffffffffffffffffffffffffffff1690565b5f5461040a565b61089864ffffffffff81565b60405164ffffffffff9091168152602001610414565b6104306108bc366004616f70565b613345565b61040a6108cf366004616f47565b6133f3565b6104306108e2366004616fd2565b61362f565b61040a6108f5366004616d11565b61372a565b61040a610908366004616cfa565b5f90815260016020819052604090912001546effffffffffffffffffffffffffffff1690565b610936600181565b60405167ffffffffffffffff9091168152602001610414565b61040a61095d366004616cfa565b613741565b6104eb610970366004616f47565b613757565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff166104b3565b61040a6109c0366004616d11565b613a7a565b6104306109d3366004616f70565b613a91565b6104eb6109e6366004616d6d565b5f91825260026020908152604080842073ffffffffffffffffffffffffffffffffffffffff939093168452919052902080546001909101546f010000000000000000000000000000009091046effffffffffffffffffffffffffffff169160189190910b90565b610430610a5b366004616d54565b613b2b565b6104eb610a6e366004616ef2565b613c95565b61040a610a81366004616d11565b613f79565b61040a610a94366004616d6d565b613f90565b61040a610aa7366004616cfa565b5f9081526001602052604090206009015478ffffffffffffffffffffffffffffffffffffffffffffffffff1690565b61040a610ae4366004616d54565b613fd8565b610b4d610af7366004616cfa565b5f9081526001602052604090206005810154905473ffffffffffffffffffffffffffffffffffffffff909116917e0100000000000000000000000000000000000000000000000000000000000090910460ff1690565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610414565b610c32610b89366004616cfa565b604080516080810182525f808252602082018190529181018290526060810191909152505f908152600160209081526040918290208251608081018452600882015473ffffffffffffffffffffffffffffffffffffffff908116825260038301547e01000000000000000000000000000000000000000000000000000000000000900461ffff169382019390935260068201548316938101939093526007015416606082015290565b60405161041491905f60808201905073ffffffffffffffffffffffffffffffffffffffff835116825261ffff602084015116602083015273ffffffffffffffffffffffffffffffffffffffff604084015116604083015273ffffffffffffffffffffffffffffffffffffffff606084015116606083015292915050565b61040a610cbd366004616d6d565b5f91825260026020818152604080852073ffffffffffffffffffffffffffffffffffffffff949094168552929052912001546effffffffffffffffffffffffffffff1690565b61040a610d11366004616f47565b614070565b610f36610d24366004616cfa565b60408051610220810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101829052610200810191909152505f9081526001602081815260409283902083516102208101855281546effffffffffffffffffffffffffffff80821683526f010000000000000000000000000000008083048216958401959095527e010000000000000000000000000000000000000000000000000000000000009182900460ff169683019690965293820154808616606083015283900485166080820152600282015460180b60a0820152600382015480861660c0830152838104861660e08301529390930461ffff1661010084015260048101549384166101208401529083046bffffffffffffffffffffffff166101408301527b0100000000000000000000000000000000000000000000000000000090920464ffffffffff16610160820152600582015473ffffffffffffffffffffffffffffffffffffffff908116610180830152600683015481166101a0830152600783015481166101c08301526008830154166101e082015260099091015478ffffffffffffffffffffffffffffffffffffffffffffffffff1661020082015290565b604051610414919061701a565b61040a610f51366004616d6d565b61428d565b61040a610f64366004616cfa565b6142e0565b61109f610f77366004616d6d565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152505f82815260026020818152604080842073ffffffffffffffffffffffffffffffffffffffff86168552825292839020835160a08101855292015464ffffffffff6f01000000000000000000000000000000820481168452740100000000000000000000000000000000000000008204169183019190915262ffffff7901000000000000000000000000000000000000000000000000008204169282019290925260ff7c010000000000000000000000000000000000000000000000000000000083048116151560608301527d0100000000000000000000000000000000000000000000000000000000009092049091161515608082015292915050565b60405161041491905f60a08201905064ffffffffff835116825264ffffffffff602084015116602083015262ffffff604084015116604083015260608301511515606083015260808301511515608083015292915050565b61040a611105366004616d11565b614330565b611112601281565b60405160ff9091168152602001610414565b611112600681565b6112ed61113a366004616d6d565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152505f82815260026020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855282529283902083516101408101855281546effffffffffffffffffffffffffffff80821683526f0100000000000000000000000000000091829004811694830194909452600183015460180b9582019590955292810154918216606084015264ffffffffff9382048416608084015274010000000000000000000000000000000000000000820490931660a083015262ffffff79010000000000000000000000000000000000000000000000000082041660c083015260ff7c010000000000000000000000000000000000000000000000000000000082048116151560e08401527d01000000000000000000000000000000000000000000000000000000000090910416151561010082015260039091015478ffffffffffffffffffffffffffffffffffffffffffffffffff1661012082015292915050565b6040516104149190617264565b5f611307335b5f36614347565b5f548210611341576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526001602052604090206113578161453f565b5f6113628285614673565b905061136e82856148a8565b9150505b919050565b5f5482106113b1576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8281526001602052604090206113c78161453f565b6113d2813384614982565b80546effffffffffffffffffffffffffffff16808084111561142c576040517fc730333f00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b60405180910390fd5b5061143d838203614a16565b614a16565b82547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff9190911617825561148183614a16565b600183018054600f906114b99084906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061150084836148a890919063ffffffff16565b60058201546115269073ffffffffffffffffffffffffffffffffffffffff163385614a6e565b604051838152339085907f69bb3893073d7a893f3933f3871309fc25acfc72e365b71f554d439a85b20e8b906020015b60405180910390a350505050565b5f81815260016020526040812061158461157d82614ac9565b8290614baa565b9392505050565b5f8281526003602052604081206115a29083614bc9565b90505b92915050565b5f8181526001602052604081208190816115c482614ac9565b90506115d08282614bd4565b6115da8383614bf6565b935093505050915091565b5f8281526003602052604081206115a29083614c50565b5f61160633611300565b73ffffffffffffffffffffffffffffffffffffffff871615801590611640575073ffffffffffffffffffffffffffffffffffffffff851615155b8015611661575073ffffffffffffffffffffffffffffffffffffffff841615155b611697576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff86166006118015906116af5750601260ff871611155b6116e5576040517fe236476500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8088165f818152600460209081526040808320548352600190915290206005015490911603611755576040517f603c058b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80548180611763836173ce565b9091555073ffffffffffffffffffffffffffffffffffffffff808a165f9081526004602081905260409182902084905590517fa467cc590000000000000000000000000000000000000000000000000000000081529293509087169163a467cc59916117d5918591899189910161744c565b5f604051808303815f87803b1580156117ec575f5ffd5b505af11580156117fe573d5f5f3e3d5ffd5b50506040517ff5fe86ee000000000000000000000000000000000000000000000000000000008152600481018490525f60248201819052604482018190526064820181905260848201819052925073ffffffffffffffffffffffffffffffffffffffff8816915063f5fe86ee9060a401602060405180830381865afa158015611889573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ad9190617465565b60408051610220810182525f8082526020820181905260ff8c1692820192909252606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091529091506b033b2e3c9fd0803ce8000000904290610120810161191b84614a16565b6effffffffffffffffffffffffffffff16815260200161193a85614c7e565b6bffffffffffffffffffffffff16815260200161195683614ccf565b64ffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1681526020018973ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681526020015f78ffffffffffffffffffffffffffffffffffffffffffffffffff1681525060015f8681526020019081526020015f205f820151815f015f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff1602179055506020820151815f01600f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff1602179055506040820151815f01601e6101000a81548160ff021916908360ff1602179055506060820151816001015f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff160217905550608082015181600101600f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555060a0820151816002015f6101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908360180b78ffffffffffffffffffffffffffffffffffffffffffffffffff16021790555060c0820151816003015f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555060e082015181600301600f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061010082015181600301601e6101000a81548161ffff021916908361ffff160217905550610120820151816004015f6101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061014082015181600401600f6101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061016082015181600401601b6101000a81548164ffffffffff021916908364ffffffffff160217905550610180820151816005015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101a0820151816006015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101c0820151816007015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101e0820151816008015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610200820151816009015f6101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908378ffffffffffffffffffffffffffffffffffffffffffffffffff160217905550905050611e1a848a614d19565b60405160ff8b16815273ffffffffffffffffffffffffffffffffffffffff8c169085907f92fb402b777f3710166f15b30098f41042b439850df67d0195196d125458e7b39060200160405180910390a3604080516080808201835273ffffffffffffffffffffffffffffffffffffffff8c81168084525f60208086018281528f851687890190815260609788019384528851948552905161ffff1691840191909152518316828701525190911692810192909252915186927fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974928290030190a260408051838152602081018590525f81830152905185917fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f14883350919081900360600190a250919998505050505050505050565b5f8281526001602052604081206115a29083614d5f565b5f8181526001602052604081206115a590614d73565b611f8133611300565b5f548410611fbb576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f848152600160205260409020611fd18161453f565b612710611fe4604086016020870161748d565b61ffff161115612020576040517fe15e46cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f61202e6020860186616d54565b73ffffffffffffffffffffffffffffffffffffffff161415801561207757505f61205e6060860160408701616d54565b73ffffffffffffffffffffffffffffffffffffffff1614155b6120ad576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6120be6080860160608701616d54565b73ffffffffffffffffffffffffffffffffffffffff16141580612107575060018101546f0100000000000000000000000000000090046effffffffffffffffffffffffffffff16155b61213d576040517f91eaafa100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61214d604085016020860161748d565b60038201805461ffff929092167e01000000000000000000000000000000000000000000000000000000000000027dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790556121b36080850160608601616d54565b6007820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556008820154166122096020860186616d54565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612371576122458287614673565b506040805160a0810182525f808252602080830182905282840182905260608301828152608084018381528b8452600280845286852073ffffffffffffffffffffffffffffffffffffffff89168087528186529786209091015460ff7c010000000000000000000000000000000000000000000000000000000082048116151590945296909452929091527d0100000000000000000000000000000000000000000000000000000000009093049092161515909152612305878383614e97565b6123126020870187616d54565b6008840180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561236f8761236a6020890189616d54565b614d19565b505b600682015473ffffffffffffffffffffffffffffffffffffffff1661239c6060870160408801616d54565b73ffffffffffffffffffffffffffffffffffffffff161461248c576123c76060860160408701616d54565b6006830180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905561241e6060860160408701616d54565b73ffffffffffffffffffffffffffffffffffffffff1663a467cc598786866040518463ffffffff1660e01b815260040161245a9392919061744c565b5f604051808303815f87803b158015612471575f5ffd5b505af1158015612483573d5f5f3e3d5ffd5b505050506124c4565b82156124c4576040517f38ad793200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124ce82876148a8565b857fea358cc423f2a5739a0914913452665f0a41d404780bfe9038844d2980e5b974866040516124fe91906174a6565b60405180910390a2505050505050565b5f8381526001602090815260408083206002835281842033855290925282206125368261453f565b61254682828787604001356150cb565b5f612554611438848861526c565b60038401805491925082915f9061257d9084906effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080825f015f8282829054906101000a90046effffffffffffffffffffffffffffff166125dd9190617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061261c838387615280565b5f61263d86604001356b033b2e3c9fd0803ce8000000808204910615150190565b84549091505f908290612662908a906effffffffffffffffffffffffffffff1661755b565b61266c919061755b565b60058601546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192505f9173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156126df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127039190617465565b905080820382821015612745576040517f80561eeb00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b5061274f82614a16565b86547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff91909116178655612794868b6148a8565b3373ffffffffffffffffffffffffffffffffffffffff168a7f119e7f996dc987b3ae79eb3735f1620c4292f6a7761a1e0f834c445f7798b912868b8d886040516127e1949392919061756e565b60405180910390a35050506effffffffffffffffffffffffffffff169695505050505050565b5f828152600160209081526040808320600283528184203385529092529091206128308261453f565b60028101547c0100000000000000000000000000000000000000000000000000000000900460ff1661288e576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830135156128ca576040517fa664e07500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128d5828285615280565b6128df82856148a8565b3373ffffffffffffffffffffffffffffffffffffffff16847f3fa96ecf17429fddfbb919a64196f4e43f71b57f0c5c38c49a21c8e1e763d18c8560405161155691906175b9565b5f8281526001602052604081206115a290836154dd565b5f8281526001602090815260408083206002835281842073ffffffffffffffffffffffffffffffffffffffff86168552909252822082919061297f82826154f1565b6129898383615511565b9350935050505b9250929050565b5f81815260016020526040812060038101546002820154611584916f0100000000000000000000000000000090046effffffffffffffffffffffffffffff169060180b6129e384614ac9565b61551f565b5f8181526003602052604081206115a590615545565b5f8281526001602052604081206115a2908361554e565b5f548210612a4f576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f828152600160205260409020612a658161453f565b612a70813384614982565b80545f90612a909084906effffffffffffffffffffffffffffff1661755b565b60058301546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192505f9173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015612b03573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b279190617465565b905080820382821015612b69576040517f80561eeb00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b50612b7382614a16565b83547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff91909116178355612bb784614a16565b600184018054600f90612bef9084906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff160217905550612c3685846148a890919063ffffffff16565b604051848152339086907f566111831db1f090374baff3c3f9fc512084f5a9b8f5b199fb475d9c43a8013f9060200160405180910390a35050505050565b5f828152600160209081526040808320600283528184203385529092528220612c9c8261453f565b612ca782828661555b565b81545f90612cc79086906effffffffffffffffffffffffffffff1661755b565b60058401546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192505f9173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015612d3a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d5e9190617465565b905080820382821015612da0576040517f80561eeb00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b505f612daf611438868961571b565b90505f816effffffffffffffffffffffffffffff1611612dfb576040517f6edcc52300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001850180548291905f90612e229084906effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080846002015f8282829054906101000a90046effffffffffffffffffffffffffffff16612e8391906173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff160217905550612ec083614a16565b85547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff91909116178555612f0585896148a8565b604080516effffffffffffffffffffffffffffff831681526020810189905233918a917fb233dd05ed21346e144167b35a6213bcf04768dbdffdc8339e8b027b94b9f30591015b60405180910390a36effffffffffffffffffffffffffffff16979650505050505050565b33612faf7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461302b576040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401611423565b8173ffffffffffffffffffffffffffffffffffffffff163b5f03613093576040517fc2f31e5e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401611423565b61309c82615746565b5050565b5f8281526001602052604081206115a290836157de565b5f82815260016020908152604080832060088101546002845282852073ffffffffffffffffffffffffffffffffffffffff9091168086529352818420338552919093206131038461453f565b61310d8186615809565b6131188183876158a0565b61312284876148a8565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16877f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a08860405161318291815260200190565b60405180910390a4505050505050565b5f8381526001602090815260408083206002835281842033855280845282852073ffffffffffffffffffffffffffffffffffffffff87168652935292206131d88361453f565b6131e483838388615967565b6131ef8282876158a0565b6131f983876148a8565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16877f0d93b0e8579bc9db73c85a1fb79d785ffc47f8e20d346253f809cc98c48292a08860405161318291815260200190565b5f8181526001602052604081206115848361327383614ac9565b839190615b88565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0080545f919074010000000000000000000000000000000000000000900460ff166132c6575f6132e8565b7f8fb36037000000000000000000000000000000000000000000000000000000005b91505090565b5f82815260026020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855282528084209092015485845260019091529082206115a2916effffffffffffffffffffffffffffff16615cc0565b61334e33611300565b5f548310613388576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f83815260036020526040902061339f9083614c50565b6133d5576040517faa1b05f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133ee83836133e93685900385018561760f565b614e97565b505050565b5f83815260016020908152604080832060028352818420338552909252822061341b8261453f565b61342782828787615ceb565b81546effffffffffffffffffffffffffffff168080871115613478576040517fc730333f00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b505f6134876114388589614d5f565b60038501805491925082915f906134b09084906effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080835f015f8282829054906101000a90046effffffffffffffffffffffffffffff1661351091906173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061355a6114388884614a1190919063ffffffff16565b84547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff9190911617845561359f84896148a8565b60058401546135c59073ffffffffffffffffffffffffffffffffffffffff168789614a6e565b604080516effffffffffffffffffffffffffffff831681526020810189905233918a917fe2497bc41b1fa7c4ba996f24dc2affdffb2a5571584db6db0eed8fbbf1dc8517910160405180910390a36effffffffffffffffffffffffffffff16979650505050505050565b61363833611300565b5f548310613672576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8381526001602052604090206136888161453f565b60068101546040517fa467cc5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063a467cc59906136e49087908790879060040161744c565b5f604051808303815f87803b1580156136fb575f5ffd5b505af115801561370d573d5f5f3e3d5ffd5b5050505061372484826148a890919063ffffffff16565b50505050565b5f8281526001602052604081206115a2908361526c565b5f8181526001602052604081206115a590614ac9565b5f8061376233611300565b5f8581526001602090815260408083206002835281842033855280845282852073ffffffffffffffffffffffffffffffffffffffff89168652935292206137a88361453f565b600381015478ffffffffffffffffffffffffffffffffffffffffffffffffff165f6b033b2e3c9fd0803ce800000080830615159083040189106137eb57816137f4565b6137f489615f46565b90506138008482615f63565b6b033b2e3c9fd0803ce80000008082049082061515015f6138246114388884615ffa565b60018801805491925082915f9061384d9084906effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080866002015f8282829054906101000a90046effffffffffffffffffffffffffffff166138ae9190617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff1602179055506138eb83616025565b6009880180545f9061391990849078ffffffffffffffffffffffffffffffffffffffffffffffffff166176c2565b92506101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908378ffffffffffffffffffffffffffffffffffffffffffffffffff16021790555061396a83616025565b6003860180545f9061399890849078ffffffffffffffffffffffffffffffffffffffffffffffffff166176c2565b92506101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908378ffffffffffffffffffffffffffffffffffffffffffffffffff1602179055506139f38c886148a890919063ffffffff16565b604080516effffffffffffffffffffffffffffff831681526020810185905273ffffffffffffffffffffffffffffffffffffffff8c169133918f917fe97b8576ac531cdc817b933309d0518ca3d26c6b46d490f3ae9fa39426a141ee910160405180910390a46effffffffffffffffffffffffffffff169b909a5098505050505050505050565b5f8281526001602052604081206115a29083615cc0565b613a9a33611300565b5f548310613ad4576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613b21576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133d58383616083565b60015f613b36616116565b805490915068010000000000000000900460ff1680613b635750805467ffffffffffffffff808416911610155b15613b9a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001667ffffffffffffffff8316176801000000000000000017815573ffffffffffffffffffffffffffffffffffffffff8316613c24576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613c2d8361613e565b80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f838152600160209081526040808320600283528184203385529092528220829190613cc08261453f565b613cd08282888860400135616152565b5f613cde611438848961526c565b60038401805491925082915f90613d079084906effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080825f015f8282829054906101000a90046effffffffffffffffffffffffffffff16613d679190617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff160217905550613da6838388615280565b60048301545f90604088013590613dd2906effffffffffffffffffffffffffffff9081169085166176f3565b613ddc919061755b565b9050613de781616025565b6009850180545f90613e1590849078ffffffffffffffffffffffffffffffffffffffffffffffffff1661770a565b92506101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908378ffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613e6681616025565b6003840180545f90613e9490849078ffffffffffffffffffffffffffffffffffffffffffffffffff1661770a565b92506101000a81548178ffffffffffffffffffffffffffffffffffffffffffffffffff021916908378ffffffffffffffffffffffffffffffffffffffffffffffffff160217905550613eef89856148a890919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff16897f4845ee5c72bde2b62defc8a1ca2f0fc3313b2d9e799997ce4f6776da9773bcbf848a85604051613f3a9392919061773b565b60405180910390a36effffffffffffffffffffffffffffff909116986b033b2e3c9fd0803ce80000008083049206151591909101975095505050505050565b5f8281526001602052604081206115a2908361571b565b5f8281526001602090815260408083206002835281842073ffffffffffffffffffffffffffffffffffffffff861685529092528220613fcf828261628a565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8082165f818152600460209081526040808320548352600190915281206005015490921614614048576040517fb77e1e0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff165f9081526004602052604090205490565b5f8381526001602090815260408083206002835281842033855290925282206140988261453f565b6140a38186866162c9565b81546effffffffffffffffffffffffffffff1680808711156140f4576040517fc730333f00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b505f6141036114388589615ffa565b60018501805491925082915f9061412c9084906effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555080836002015f8282829054906101000a90046effffffffffffffffffffffffffffff1661418d9190617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff1602179055506141d76114388884614a1190919063ffffffff16565b84547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff9190911617845561421c84896148a8565b60058401546142429073ffffffffffffffffffffffffffffffffffffffff168789614a6e565b604080516effffffffffffffffffffffffffffff831681526020810189905233918a917f535be2ff85ab4c5d0991e10dc057a4951ea2bac426ffb036eded23036a3942b29101612f4c565b5f8281526001602090815260408083206002835281842073ffffffffffffffffffffffffffffffffffffffff8616855290925282206142cc8282615511565b6142d683836154f1565b613fcf919061755b565b5f8181526001602052604081206143006142f982614ac9565b829061640f565b815461158491906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff1661755b565b5f8281526001602052604081206115a29083615ffa565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005f806143c86143ab7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff1690565b87306143ba60045f8a8c617782565b6143c3916177a9565b61654e565b91509150816145375763ffffffff8116156144ed5782547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001783556144587ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff166394c7d7ee8787876040518463ffffffff1660e01b81526004016144949392919061780e565b5f604051808303815f87803b1580156144ab575f5ffd5b505af11580156144bd573d5f5f3e3d5ffd5b505084547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff168555506145379050565b6040517f068ca9d800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87166004820152602401611423565b505050505050565b6004810154427b0100000000000000000000000000000000000000000000000000000090910464ffffffffff16036145745750565b5f61457e82614ac9565b905061458d611438838361640f565b82548390600f906145c39084906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061460081614a16565b6004830180547fffffffffffffffffffffffffffffffffff000000000000000000000000000000166effffffffffffffffffffffffffffff9290921691909117905561464b42614ccf565b82600401601b6101000a81548164ffffffffff021916908364ffffffffff1602179055505050565b81545f906f0100000000000000000000000000000090046effffffffffffffffffffffffffffff16816146a9611438868461571b565b9050806effffffffffffffffffffffffffffff165f036146cd575f925050506115a5565b60088501545f85815260026020818152604080842073ffffffffffffffffffffffffffffffffffffffff90951680855294909152909120908101547c0100000000000000000000000000000000000000000000000000000000900460ff16614761576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001870180548491905f906147889084906effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555082816002015f8282829054906101000a90046effffffffffffffffffffffffffffff166147e991906173a7565b82546101009290920a6effffffffffffffffffffffffffffff81810219909316918316021790915588547fffff000000000000000000000000000000ffffffffffffffffffffffffffffff1689556040805191861682526020820187905273ffffffffffffffffffffffffffffffffffffffff8516925088917fafd21228e21de4a3f779e1cc3617e12672c3da091dcf3812a931036aa0bf633c910160405180910390a350506effffffffffffffffffffffffffffff16949350505050565b60048201546effffffffffffffffffffffffffffff165f6148ca848484615b88565b90506148d581614c7e565b6004850180547fffffffffff000000000000000000000000ffffffffffffffffffffffffffffff166f010000000000000000000000000000006bffffffffffffffffffffffff93909316830217905584546040805185815260208101859052929091046effffffffffffffffffffffffffffff169082015283907fa1facf110ded5028ee267fa3d5986f2aa4dc14230b79ffd27e95760f148833509060600160405180910390a250505050565b600783015473ffffffffffffffffffffffffffffffffffffffff8381169116146149d8576040517f3c6b774600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81116133ee576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b900390565b5f6effffffffffffffffffffffffffffff821115614a6a576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526078600482015260248101839052604401611423565b5090565b614a7b8383836001616651565b6133ee576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401611423565b60048101545f906effffffffffffffffffffffffffffff8116907b01000000000000000000000000000000000000000000000000000000900464ffffffffff1642811480614b5b575060038401546effffffffffffffffffffffffffffff16158015614b5b575060038401546f0100000000000000000000000000000090046effffffffffffffffffffffffffffff16155b15614b67575092915050565b6004840154614ba290614b9b906f0100000000000000000000000000000090046bffffffffffffffffffffffff16836166d9565b8390616707565b949350505050565b5f614bb58383614bf6565b614bbf8484614bd4565b6115a2919061755b565b5f6115a28383616736565b60038201545f906115a2906effffffffffffffffffffffffffffff1683616707565b600382015460028301545f916115a291614c38916f0100000000000000000000000000000090046effffffffffffffffffffffffffffff169060180b8561551f565b6b033b2e3c9fd0803ce8000000808204910615150190565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260018301602052604081205415156115a2565b5f6bffffffffffffffffffffffff821115614a6a576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526060600482015260248101839052604401611423565b5f64ffffffffff821115614a6a576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526028600482015260248101839052604401611423565b614d238282616083565b6040805160a08101825264ffffffffff81525f6020820181905291810182905260016060820152608081019190915261309c9083908390614e97565b5f6115a2614d6c84614ac9565b839061675c565b5f5f614d7e83614ac9565b6003840154600285015460098601549293505f92614de8926effffffffffffffffffffffffffffff808216936f01000000000000000000000000000000909204169160189190910b9078ffffffffffffffffffffffffffffffffffffffffffffffffff168661679f565b9050614df4848361640f565b84546f0100000000000000000000000000000090046effffffffffffffffffffffffffffff166b033b2e3c9fd0803ce800000080840615159084040160018701548754614e68916effffffffffffffffffffffffffffff6f01000000000000000000000000000000909104811691166173a7565b6effffffffffffffffffffffffffffff16614e83919061755b565b614e8d919061783d565b614ba2919061783d565b5f83815260026020818152604080842073ffffffffffffffffffffffffffffffffffffffff871680865290835293819020855193810180549387015187840151606089015160808a015115157d010000000000000000000000000000000000000000000000000000000000027fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9115157c0100000000000000000000000000000000000000000000000000000000027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff62ffffff90941679010000000000000000000000000000000000000000000000000002939093167fffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffff64ffffffffff95861674010000000000000000000000000000000000000000027fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff96909b166f0100000000000000000000000000000002959095167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff909916989098179890981792909216959095179490941793909316939093179091555190919085907f90984699e37aaae5f79c2f33e480f273509662005a8ff82a17b325eb7072454e906115569086905f60a08201905064ffffffffff835116825264ffffffffff602084015116602083015262ffffff604084015116604083015260608301511515606083015260808301511515608083015292915050565b5f8211806150d857505f81115b61510e576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547c0100000000000000000000000000000000000000000000000000000000900460ff1661516c576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547d010000000000000000000000000000000000000000000000000000000000900460ff16156151cc576040517f9db9b35500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6151d785856154f1565b90505f6151e4868661628a565b90508180851115615224576040517f4bd9e47600000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b508080841115615263576040517fdc86824600000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b50505050505050565b5f6115a261527984614ac9565b83906167d9565b6004830154600384015460028501546effffffffffffffffffffffffffffff928316926152ca9284926f010000000000000000000000000000009091049091169060180b85616814565b6002860180547fffffffffffffff000000000000000000000000000000000000000000000000001678ffffffffffffffffffffffffffffffffffffffffffffffffff929092169190911790556003850180547fffff000000000000000000000000000000ffffffffffffffffffffffffffffff166f010000000000000000000000000000006effffffffffffffffffffffffffffff938416810291909117909155845460018601546153889385939092049091169060180b85616814565b60018501805478ffffffffffffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffff0000000000000000000000000000000000000000000000000090921691909117905583546effffffffffffffffffffffffffffff9091166f01000000000000000000000000000000027fffff000000000000000000000000000000ffffffffffffffffffffffffffffff909116178355600283015462ffffff7901000000000000000000000000000000000000000000000000009091048116908114806154a057508354615477906effffffffffffffffffffffffffffff1662ffffff83166168ba565b84546f0100000000000000000000000000000090046effffffffffffffffffffffffffffff1611155b6154d6576040517fa664e07500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b5f6115a26154ea84614ac9565b83906168df565b80545f906115a29084906effffffffffffffffffffffffffffff1661554e565b5f6115a2614c38848461628a565b5f614ba28361553661553185886176f3565b616906565b6155409190617850565b616964565b5f6115a5825490565b5f6115a2614b9b84614ac9565b5f8111615594576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547c0100000000000000000000000000000000000000000000000000000000900460ff166155f2576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028201547d010000000000000000000000000000000000000000000000000000000000900460ff1615615652576040517f9db9b35500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015464ffffffffff6f010000000000000000000000000000009091048116908114806156e057506002830154829061569f9086906effffffffffffffffffffffffffffff166157de565b6156a9919061755b565b84547e01000000000000000000000000000000000000000000000000000000000000900460ff16600a0a6156dd90836176f3565b10155b81906154d6576040517fde3fc6ae00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b5f6115a261572884614d73565b60018501548491906effffffffffffffffffffffffffffff166169a2565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b5f6115a26157eb84614d73565b60018501548491906effffffffffffffffffffffffffffff166169c9565b60028201547c0100000000000000000000000000000000000000000000000000000000900460ff16615867576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f811161309c576040517f6edcc52300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6158a981614a16565b6002840180545f906158cd9084906effffffffffffffffffffffffffffff16617534565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff16021790555061590a81614a16565b6002830180545f9061592e9084906effffffffffffffffffffffffffffff166173a7565b92506101000a8154816effffffffffffffffffffffffffffff02191690836effffffffffffffffffffffffffffff160217905550505050565b60028301547c0100000000000000000000000000000000000000000000000000000000900460ff1680156159bf575060028201547c0100000000000000000000000000000000000000000000000000000000900460ff165b6159f5576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547d010000000000000000000000000000000000000000000000000000000000900460ff16158015615a51575060028201547d010000000000000000000000000000000000000000000000000000000000900460ff16155b615a87576040517f9db9b35500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8111615ac0576040517f6edcc52300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282015464ffffffffff6f01000000000000000000000000000000909104811690811480615b4d57506002830154615b1690615b0f9084906effffffffffffffffffffffffffffff1661755b565b86906157de565b85547e01000000000000000000000000000000000000000000000000000000000000900460ff16600a0a615b4a90836176f3565b10155b8190614537576040517fde3fc6ae00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b600683015483545f9173ffffffffffffffffffffffffffffffffffffffff169063f5fe86ee9085906effffffffffffffffffffffffffffff16615bcb8887614bd4565b6009890154615c079078ffffffffffffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000808204910615150190565b60018a015460405160e087901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260048101959095526effffffffffffffffffffffffffffff9384166024860152604485019290925260648401526f01000000000000000000000000000000900416608482015260a401602060405180830381865afa158015615c9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ba29190617465565b5f6115a2615ccd84614d73565b60018501548491906effffffffffffffffffffffffffffff166169f1565b3073ffffffffffffffffffffffffffffffffffffffff821603615d3a576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8211615d73576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547c0100000000000000000000000000000000000000000000000000000000900460ff16615dd1576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547d010000000000000000000000000000000000000000000000000000000000900460ff1615615e31576040517f9db9b35500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600283015474010000000000000000000000000000000000000000900464ffffffffff165f615e608686615511565b615e6a87876154f1565b615e74919061755b565b905064ffffffffff821480615f0b57506003850154615ec09078ffffffffffffffffffffffffffffffffffffffffffffffffff166b033b2e3c9fd0803ce8000000808204910615150190565b615eca858361755b565b615ed4919061755b565b86547e01000000000000000000000000000000000000000000000000000000000000900460ff16600a0a615f0890846176f3565b10155b8290615263576040517f3ad30dd000000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b6b033b2e3c9fd0803ce80000008181029081048214611372575f5ffd5b60028201547c0100000000000000000000000000000000000000000000000000000000900460ff16615fc1576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f811161309c576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6115a261600784614d73565b60018501548491906effffffffffffffffffffffffffffff16616a0f565b5f78ffffffffffffffffffffffffffffffffffffffffffffffffff821115614a6a576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c8600482015260248101839052604401611423565b5f82815260036020526040902061609a9082616a2d565b6160d0576040517f04c9458300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff82169083907f47acdb603dbca71028fbd9b37192e17a62e64fa160e2e607eef3853b792ea5ab905f90a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006115a5565b616146616a4e565b61614f81616a8e565b50565b5f82118061615f57505f81115b616195576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547c0100000000000000000000000000000000000000000000000000000000900460ff166161f3576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6161fe85856154f1565b90505f61620b868661628a565b9050818085111561624b576040517f04ddd91f00000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b508080841115615263576040517f37f3f9b700000000000000000000000000000000000000000000000000000000815260040161142391815260200190565b805460018201545f916115a2916f010000000000000000000000000000009091046effffffffffffffffffffffffffffff169060180b6129e386614ac9565b3073ffffffffffffffffffffffffffffffffffffffff821603616318576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8211616351576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547c0100000000000000000000000000000000000000000000000000000000900460ff166163af576040517fe86fa03200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028301547d010000000000000000000000000000000000000000000000000000000000900460ff16156133ee576040517f9db9b35500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60048201545f906effffffffffffffffffffffffffffff16828103616437575f9150506115a5565b60038401547e01000000000000000000000000000000000000000000000000000000000000900461ffff165f819003616474575f925050506115a5565b6003850154600286015460098701546effffffffffffffffffffffffffffff808416936f010000000000000000000000000000009004169160180b9078ffffffffffffffffffffffffffffffffffffffffffffffffff165f6164d9858585858d61679f565b90505f61650b866effffffffffffffffffffffffffffff16866effffffffffffffffffffffffffffff1686868c61679f565b905061653f876165396b033b2e3c9fd0803ce80000008085048186061515019080870490870615150161783d565b90616a9f565b9b9a5050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201527fffffffff00000000000000000000000000000000000000000000000000000000821660648201525f9081908190608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb7009613000000000000000000000000000000000000000000000000000000001781525f808052918290528351939450919290918a5afa15616647575f516020805191945081901c150291505b5094509492505050565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000005f81815273ffffffffffffffffffffffffffffffffffffffff8616600452602485905291602083604481808b5af1925060015f511483166166cd5783831516156166c1573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b5f428211156166e6575f5ffd5b506301e13380429190910391909102046b033b2e3c9fd0803ce80000000190565b5f815f190483111582151761671a575f5ffd5b506b033b2e3c9fd0803ce8000000910281810491900615150190565b5f825f01828154811061674b5761674b61786f565b905f5260205f200154905092915050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e02884111715616781575f5ffd5b506b033b2e3c9fd0803ce80000009190910281810491900615150190565b5f5f6167ac86868561551f565b905083816167ba858a6176f3565b6167c4919061755b565b6167ce919061755b565b979650505050505050565b5f8115744f3a68dbc8f03f243baf513267aa9a3ee524f8e028841117156167fe575f5ffd5b506b033b2e3c9fd0803ce8000000919091020490565b5f5f5f61682286868961551f565b90505f616830878635616abc565b90505f61684160208701358861789c565b90505f61684f83838c61551f565b90508361686060408901358361755b565b14616897576040517fa664e07500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6168a083614a16565b6168a983616ae8565b955095505050505094509492505050565b5f815f19048311158215176168cd575f5ffd5b50612710910281810491900615150190565b5f815f19048311158215176168f2575f5ffd5b506b033b2e3c9fd0803ce800000091020490565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115614a6a576040517f24775e0600000000000000000000000000000000000000000000000000000000815260048101839052602401611423565b5f5f821215614a6a576040517fa8ce443200000000000000000000000000000000000000000000000000000000815260048101839052602401611423565b5f614ba26169b3620f42408461755b565b6169c0620f42408661755b565b8691905f616b30565b5f614ba26169da620f42408561755b565b6169e7620f42408561755b565b8691906001616b30565b5f614ba2616a02620f42408561755b565b6169c0620f42408561755b565b5f614ba2616a20620f42408461755b565b6169e7620f42408661755b565b5f6115a28373ffffffffffffffffffffffffffffffffffffffff8416616b68565b616a56616bb4565b616a8c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b616a96616a4e565b61614f81615746565b5f815f1904831115821517616ab2575f5ffd5b5061271091020490565b5f5f8212616ad557616ace828461755b565b90506115a5565b616ade826178c3565b6115a2908461783d565b80601881900b8114611372576040517f327269a700000000000000000000000000000000000000000000000000000000815260c8600482015260248101839052604401611423565b5f616b5d616b3d83616bd2565b8015616b5857505f8480616b5357616b536178f9565b868809115b151590565b6142d6868686616bfe565b5f818152600183016020526040812054616bad57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556115a5565b505f6115a5565b5f616bbd616116565b5468010000000000000000900460ff16919050565b5f6002826003811115616be757616be7617926565b616bf19190617953565b60ff166001149050919050565b5f5f5f616c0b8686616cae565b91509150815f03616c2f57838181616c2557616c256178f9565b0492505050611584565b818411616c4657616c466003851502601118616ce9565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f60208284031215616d0a575f5ffd5b5035919050565b5f5f60408385031215616d22575f5ffd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114611372575f5ffd5b5f60208284031215616d64575f5ffd5b6115a282616d31565b5f5f60408385031215616d7e575f5ffd5b82359150616d8e60208401616d31565b90509250929050565b5f5f83601f840112616da7575f5ffd5b50813567ffffffffffffffff811115616dbe575f5ffd5b602083019150836020828501011115612990575f5ffd5b5f5f5f5f5f5f60a08789031215616dea575f5ffd5b616df387616d31565b9550602087013560ff81168114616e08575f5ffd5b9450616e1660408801616d31565b9350616e2460608801616d31565b9250608087013567ffffffffffffffff811115616e3f575f5ffd5b616e4b89828a01616d97565b979a9699509497509295939492505050565b5f5f5f5f84860360c0811215616e71575f5ffd5b8535945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215616ea4575f5ffd5b5060208501925060a085013567ffffffffffffffff811115616ec4575f5ffd5b616ed087828801616d97565b95989497509550505050565b5f60608284031215616eec575f5ffd5b50919050565b5f5f5f60a08486031215616f04575f5ffd5b8335925060208401359150616f1c8560408601616edc565b90509250925092565b5f5f60808385031215616f36575f5ffd5b82359150616d8e8460208501616edc565b5f5f5f60608486031215616f59575f5ffd5b8335925060208401359150616f1c60408501616d31565b5f5f5f83850360e0811215616f83575f5ffd5b84359350616f9360208601616d31565b925060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc082011215616fc4575f5ffd5b506040840190509250925092565b5f5f5f60408486031215616fe4575f5ffd5b83359250602084013567ffffffffffffffff811115617001575f5ffd5b61700d86828701616d97565b9497909650939450505050565b81516effffffffffffffffffffffffffffff1681526102208101602083015161705660208401826effffffffffffffffffffffffffffff169052565b50604083015161706b604084018260ff169052565b50606083015161708e60608401826effffffffffffffffffffffffffffff169052565b5060808301516170b160808401826effffffffffffffffffffffffffffff169052565b5060a08301516170c660a084018260180b9052565b5060c08301516170e960c08401826effffffffffffffffffffffffffffff169052565b5060e083015161710c60e08401826effffffffffffffffffffffffffffff169052565b5061010083015161712461010084018261ffff169052565b506101208301516171496101208401826effffffffffffffffffffffffffffff169052565b5061014083015161716b6101408401826bffffffffffffffffffffffff169052565b5061016083015161718661016084018264ffffffffff169052565b506101808301516171b061018084018273ffffffffffffffffffffffffffffffffffffffff169052565b506101a08301516171da6101a084018273ffffffffffffffffffffffffffffffffffffffff169052565b506101c08301516172046101c084018273ffffffffffffffffffffffffffffffffffffffff169052565b506101e083015161722e6101e084018273ffffffffffffffffffffffffffffffffffffffff169052565b5061020083015161725d61020084018278ffffffffffffffffffffffffffffffffffffffffffffffffff169052565b5092915050565b81516effffffffffffffffffffffffffffff168152610140810160208301516172a060208401826effffffffffffffffffffffffffffff169052565b5060408301516172b5604084018260180b9052565b5060608301516172d860608401826effffffffffffffffffffffffffffff169052565b5060808301516172f1608084018264ffffffffff169052565b5060a083015161730a60a084018264ffffffffff169052565b5060c083015161732160c084018262ffffff169052565b5060e083015161733560e084018215159052565b5061010083015161734b61010084018215159052565b5061012083015161725d61012084018278ffffffffffffffffffffffffffffffffffffffffffffffffff169052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6effffffffffffffffffffffffffffff81811683821601908111156115a5576115a561737a565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036173fe576173fe61737a565b5060010190565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b838152604060208201525f613fcf604083018486617405565b5f60208284031215617475575f5ffd5b5051919050565b803561ffff81168114611372575f5ffd5b5f6020828403121561749d575f5ffd5b6115a28261747c565b6080810173ffffffffffffffffffffffffffffffffffffffff6174c884616d31565b16825261ffff6174da6020850161747c565b16602083015273ffffffffffffffffffffffffffffffffffffffff61750160408501616d31565b16604083015273ffffffffffffffffffffffffffffffffffffffff61752860608501616d31565b16606083015292915050565b6effffffffffffffffffffffffffffff82811682821603908111156115a5576115a561737a565b808201808211156115a5576115a561737a565b6effffffffffffffffffffffffffffff8516815260c081016175a760208301868035825260208082013590830152604090810135910152565b608082019390935260a0015292915050565b813581526020808301359082015260408083013590820152606081016115a5565b803564ffffffffff81168114611372575f5ffd5b803562ffffff81168114611372575f5ffd5b80358015158114611372575f5ffd5b5f60a0828403128015617620575f5ffd5b5060405160a0810167ffffffffffffffff81118282101715617669577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604052617675836175da565b8152617683602084016175da565b6020820152617694604084016175ee565b60408201526176a560608401617600565b60608201526176b660808401617600565b60808201529392505050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff82811682821603908111156115a5576115a561737a565b80820281158282048414176115a5576115a561737a565b78ffffffffffffffffffffffffffffffffffffffffffffffffff81811683821601908111156115a5576115a561737a565b6effffffffffffffffffffffffffffff8416815260a0810161777460208301858035825260208082013590830152604090810135910152565b826080830152949350505050565b5f5f85851115617790575f5ffd5b8386111561779c575f5ffd5b5050820193919092039150565b80357fffffffff00000000000000000000000000000000000000000000000000000000811690600484101561725d577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505092915050565b73ffffffffffffffffffffffffffffffffffffffff84168152604060208201525f613fcf604083018486617405565b818103818111156115a5576115a561737a565b8181035f83128015838313168383128216171561725d5761725d61737a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8082018281125f8312801582168215821617156178bb576178bb61737a565b505092915050565b5f7f800000000000000000000000000000000000000000000000000000000000000082036178f3576178f361737a565b505f0390565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff83168061798a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8060ff8416069150509291505056